2017-08-30 13 views
0

は、私は3つのテーブルを持っている:製品、在庫や食材サブクエリの販売と在庫

Product Table  
ID[PK]  Name   Type 
1   OrdinaryBurger  Burger 
2   CheeseBurger  Burger 

Ingredients table 
ID[PK]  ProductID[FK] InventoryID[FK] Quantity 
1001  1     100   1 
1002  1     101   1 
1003  2     100   1 
1004  2     101   1 
1005  2     103   1 


Inventory table 
ID[PK] Item_name Stocks 
100  Buns   5 
101  Patties  5 
103  Cheese  0 
は、私はすべての製品をフィルタリングすることができ、クエリを書きたいです接続在庫在庫が0の場合は表示されません。たとえば、チーズの在庫が0であるため、チーズバーガーが表示されません。ごみ箱

+1

これまでに何を試みましたか? –

+0

数量の意味は何ですか?それは5であるように金額ではありません。 – Eli

+0

1の数は、あなたが必要とする通常のハンバーガーで1つのパンが必要なアイテムの数を意味します。 –

答えて

0

以下は、少なくとも成分が十分にある製品のみを返します。

SELECT * FROM Products WHERE ProductID NOT IN (
    SELECT i.ProductID 
    FROM Ingredients i 
    JOIN Inventory iv ON i.InventoryID = iv.InventoryId 
    GROUP BY i.ProductID, i.InventoryId 
    HAVING SUM(iv.Stocks) < SUM(i.Quantity) 
) 
+0

。 –

+0

'Products'への参加は不要です。 –

+0

Good findは、不要な結合を削除しました。また、参考までに、この使用方法に応じて、複数の製品で使用されている同じ成分がこのクエリで処理されないことを考慮する必要があります。 – Carl

関連する問題