PostgreSQL, consulta complexa para calcular ingredientes por receita
Eu tenho que calcular o alimento e os ingredientes dos alimentos usados armazenados nas tabelas do PostgreSQL:
table1 'usedfood'
food food used used
code name qty meas
----------------------------------------------
10 spaghetti 3 pcs
156 mayonnaise 2 pcs
173 ketchup 1 pcs
172 bolognese sauce 2 pcs
173 ketchup 1 pcs
10 spaghetti 2 pcs
156 mayonnaise 1 pcs
table2 'ingredients'
food ingr. ingredient qty meas
code code name /1 in 1
----------------------------------------------
10 1256 spaghetti rinf 75 gramm
156 1144 salt 0.3 gramm
10 1144 salt 0.5 gramm
156 1140 fresh egg 50 gramm
172 1138 tomato 80 gramm
156 1139 mustard 5 gramm
172 1136 clove 1 gramm
156 1258 oil 120 gramm
172 1135 laurel 0.4 gramm
10 1258 oil 0.4 gramm
172 1130 corned beef 40 gramm
resultado:
used
times code food/ingredient qty meas
----------------------------------------------
5 1256 spaghetti rinf 375 gramm
8 1258 oil 362 gramm
2 1138 tomato 160 gramm
3 1140 fresh egg 150 gramm
2 1130 corned beef 80 gramm
3 1139 mustard 15 gramm
8 1144 salt 3.4 gramm
2 1136 clove 2 gramm
2 1135 laurel 0.8 gramm
2 173 ketchup 2 pcs //haven't any ingredients
Por enquanto, faço isso fazendo um loop através da tabela 1 e consultando a tabela 2 para cada linha, depois adicionando resultados e assim por diante (com C), o que pode ser muito lento em dados maiores.
Tabela 1 contém o código alimentar, o nome do alimento e a quantidade utilizada. A tabela 2 contém ingredientes (em ordem bagunçada) com código e quantidade usada para uma paz de comida e também código de comida no qual aparece.
A quantidade usada da tabela1 deve ser multiplicada com a quantidade da tabela2 de acordo com cada receita e deve ser adicionada ao resultado do código de ingredientes.
Assim, todas as linhas de ingredientes que vão para o "espaguete" alimentar começam com o código de espaguete de comida (10).
Alimentos sem qualquer ingrediente devem ser calculados com quantidade da tabela 1 e mostrados com o mesmo nome. Isso realmente significa que é um produto final (como garrafa de cerveja).
Aqui pode ser mais complicação, mas tenho medo de perguntar. Por exemplo em ingredinets a lista pode ser um ingrediente que é uma receita por ele mesmo. Por exemplo mostarda que contém de vinagre, sal, semente, etc ... O que então? Na tabela 2 do exemplo mostrado, a mostarda é usada como produto pronto (componente).
Existe alguma maneira de fazer tal cálculo e obter resultados rapidamente usando apenas o PostgreSQL, que dará resultados prontos ao programa C?
Talvez não seja tão complexo quanto parece para mim? Como seria essa consulta?