PostgreSQL, сложный запрос для расчета ингредиентов по рецепту
Я должен рассчитать продукты и ингредиенты использованной пищи, хранящиеся в таблицах 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
результат:
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
Сейчас я делаю это, просматривая таблицу table1 и запрашивая table2 для каждой строки, затем добавляя результаты и т. Д. (С C), что может быть очень медленным для больших данных.
Таблица1 содержит код продукта, название продукта и использованное количество. Таблица 2 содержит ингредиенты (в беспорядочном порядке) с кодом и используемым количеством на один кусок пищи, а также код пищи, в которой они указаны.
Использованное количество из таблицы 1 следует умножить на количество из таблицы 2 согласно каждому рецепту и добавить к результату кода ингредиентов.
Таким образом, все строки ингредиентов, которые идут в "спагетти", начинаются с кода спагетти (10).
Пищу без каких-либо ингредиентов следует рассчитывать по количеству из таблицы1 и показывать с тем же названием. Это на самом деле означает, что это конечный продукт (например, бутылка пива).
Здесь может быть больше осложнений, но я боюсь спросить. Например, в списке ингредиентов может быть ингредиент, который рецепт сам. Например, горчица, содержащая уксус, соль, семена и т. Д. Что тогда? В таблице 2 приведенного примера в качестве готового продукта (компонента) используется горчица.
Есть ли способ сделать такой расчет и получить результаты быстро с помощью только PostgreSQL, который даст готовые результаты для C-программы?
Может быть, это не слишком сложно для меня? Как будет выглядеть этот запрос?