2017-05-12 9 views
0

SQL Tables 上記のように4つのテーブルがあるとします。 BOMはBOMを意味します。ご覧のように、製造指図1にはBOM(ITEM3)の1品目がなく、製造指図2には他の品目(ITEM1)がありません。 BOMコードが与えられていると、商品が不足しているすべての製造指図をどのように取得できますか?結果は次のようになります。他のテーブルに存在しない行を選択してください

ID | Item 
---|------ 
1 | ITEM3 
2 | ITEM1 

答えて

1

方法:

SELECT id, item 
    FROM production_order po 
     JOIN bom_items bi ON po.code = bi.father 
WHERE NOT EXISTS 
    (SELECT 1 FROM production_oder_items poi 
     WHERE poi.id = po.id 
     AND poi.item = bi.item) 
    AND po.code = 'CAR01'; 
1

考えられるのは、すべての製造注文項目の組み合わせを決定することです。そして、存在しないものを判断するためにleft joinを使用します。これについて

select po.Production_Order, bi.item 
from Production_Order po cross join 
    BOM_Items bi left join 
    Product_Order_Items poi 
    on poi.Production_order = po.id and 
     poi.Item = bi.Item 
where poi.Item is null; 
+0

は良いようだが、どこでBOMコードを決定するためにWHERE句を置けばいいの? like(WHERE po.Code = 'CAR01') – ruda

+0

@ルーダ。 。 。これをWHERE句に追加します。 –

+0

私はpoi.Itemがnullで、po.Code = 'CAR01'のようなものを試してみました。選択項目の2番目の列が間違った値を返しています。 – ruda

関連する問題