根据另一个表中的值过滤mysql表

时间:2016-09-09 13:47:15

标签: mysql

我这里有2张表,STOCK (ID, CODE)SALES (ID, CODE, STATUS)。我想通过使用SALES表中的某些条件来过滤STOCK表的值。

例如,如果我们在

中有这些值

股票表

A1
A2
A3
A4
A5

并在

销售表

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

结果应为:

A4
A5 

应从结果中删除哪些状态为SOLD和ASSIGNED的项目。在SALES表中具有状态返回的项目和尚未从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'));

请帮我解决这个问题。

1 个答案:

答案 0 :(得分: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