2016-09-09 10 views
2

ここには2つのテーブルSTOCK (ID, CODE)SALES (ID, CODE, STATUS)があります。 SALESテーブルの特定の条件を使用してSTOCKテーブルの値をフィルタリングしたいと思います。例えば別のテーブルからの値に基づくフィルタmysqlテーブル

、我々は

在庫表でこれらの値を持っている場合:

A1 
A2 
A3 
A4 
A5 

SALES表で:

A1 - Sold 
A2 - Returned 
A3 - Assigned 
A2 - Sold 
A4 - Returned 

結果は次のようになります。状態SOLDと割り当てられたとのこれまでの項目が結果から削除する必要があり

A4 
A5 

。 SALESテーブルのステータスがRETURNEDのアイテム、およびSTOCKテーブルからまだ使用されていないアイテムは、入力可能である必要があります。

私は、次のコードを試してみましたが、問題は、返されたアイテムはまたはを割り当てを販売状況とSALESテーブルに再入力されると、ということです、それはまだ結果になっています。

SELECT t1.CODE 
FROM STOCK t1 
LEFT JOIN SALES t2 ON t2.CODE = t1.CODE 
WHERE (t2.CODE IS NULL OR (t2.STATUS <> 'Sold' AND t2.STATUS <> 'Assigned')); 

この問題を解決するのを手伝ってください。

答えて

2

次のクエリでは、あなたの期待した結果を返す、あなたの条件に基づいて:与えられたサンプルデータと同じため

SELECT S1.CODE 
FROM STOCK S1 
LEFT JOIN ( 
     SELECT t1.CODE 
     FROM STOCK t1 
     JOIN SALES t2 ON t2.CODE = t1.CODE 
     WHERE t2.STATUS IN ('Sold', 'Assigned')) S2 ON S2.CODE = S1.CODE 
WHERE S2.CODE IS NULL; 

見つけてくださいLIVE DEMO

+0

ありがとうございます。これは私が必要とするものです。どうもありがとうございました。 – Vishnu

+0

SELECTの中でサブクエリが許可されていないので、** VIEW **でこれを使用するのを手伝っていただけると大変感謝しています。 – Vishnu

関連する問題