0

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だけを使用してそのような計算を行い、結果をすばやく取得する方法はありますか?
私にとってはそれほど複雑ではないでしょうか?そのクエリはどのようになりますか?

4

1 に答える 1