我必须计算存储在 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 中的数量计算,并以相同的名称显示。这实际上意味着它是最终产品(如啤酒瓶)。
这里可能更复杂,但我不敢问。例如,在 ingredinets 列表中可能是自己制作的成分。例如芥末,其中含有醋、盐、种子等……然后呢?在所示示例的表 2 中,芥末用作现成产品(组分)。
这里有什么方法可以进行这样的计算并使用 PostgreSQL 快速获得结果,这将为 C 程序提供现成的结果?
也许对我来说不像看起来那么复杂?该查询的外观如何?