我这里有两个表,STOCK (ID, CODE)
和SALES (ID, CODE, STATUS)
。我想使用SALES表中的特定条件来过滤STOCK表的值。
例如,如果我们在
中有这些值STOCK Table:
A1
A2
A3
A4
A5
和
SALES Table:
A1 - Sold
A2 - Returned
A3 - Assigned
A2 - Sold
A4 - Returned
结果应该是:
A4
A5
任何状态为SOLD和ASSIGNED的项目都应从结果中删除。SALES表中状态已返回的项和STOCK表中尚未使用的项应该可供输入。
我尝试了以下代码,但问题是,一旦在SALES表中以状态Sold或Assigned重新输入已返回的项目,它仍然会进入结果。
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'));
请帮我解决这个问题
根据您的条件,下面的查询返回您期望的结果:
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
与给定的样本数据相同。