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 を使用して) 結果を追加することでこれを行います。これは、大きなデータでは非常に遅くなる可能性があります。
Table1 には、食品コード、食品名、および使用量が含まれています。表 2 には、食品 1 ピースのコードと使用量、および表示される食品のコードとともに、材料 (乱雑な順序) が含まれています。
テーブル 1 の使用量は、すべてのレシピに従ってテーブル 2 の量と乗算し、成分コードの結果に追加する必要があります。
そのため、食品「スパゲッティ」に移動するすべての材料行は、食品スパゲッティ コード (10) で始まります。
材料のない食品は、表1の量で計算し、同じ名前で表示する必要があります. それは実際には最終製品(ビール瓶のようなもの)であることを意味します。
ここでさらに複雑になるかもしれませんが、恐れながらお尋ねします。たとえば、 ingredinets リストでは、自分でレシピを作成した材料が含まれる場合があります。たとえば、酢、塩、種子などを含むマスタード. 示した例の表 2 では、マスタードが既製品 (コンポーネント) として使用されています。
Cプログラムにすぐに結果を与える、PostgreSQLだけを使用してそのような計算を行い、結果をすばやく取得する方法はありますか?
私にとってはそれほど複雑ではないでしょうか?そのクエリはどのようになりますか?