上記のように4つのテーブルがあるとします。 BOMはBOMを意味します。ご覧のように、製造指図1にはBOM(ITEM3)の1品目がなく、製造指図2には他の品目(ITEM1)がありません。 BOMコードが与えられていると、商品が不足しているすべての製造指図をどのように取得できますか?結果は次のようになります。他のテーブルに存在しない行を選択してください
ID | Item
---|------
1 | ITEM3
2 | ITEM1
上記のように4つのテーブルがあるとします。 BOMはBOMを意味します。ご覧のように、製造指図1にはBOM(ITEM3)の1品目がなく、製造指図2には他の品目(ITEM1)がありません。 BOMコードが与えられていると、商品が不足しているすべての製造指図をどのように取得できますか?結果は次のようになります。他のテーブルに存在しない行を選択してください
ID | Item
---|------
1 | ITEM3
2 | ITEM1
方法:
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';
考えられるのは、すべての製造注文項目の組み合わせを決定することです。そして、存在しないものを判断するために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;
は良いようだが、どこでBOMコードを決定するためにWHERE句を置けばいいの? like(WHERE po.Code = 'CAR01') – ruda
@ルーダ。 。 。これをWHERE句に追加します。 –
私はpoi.Itemがnullで、po.Code = 'CAR01'のようなものを試してみました。選択項目の2番目の列が間違った値を返しています。 – ruda