2016-09-09 57 views
2

我在这里有2个表,STOCK (ID, CODE)SALES (ID, CODE, STATUS)。我想通过使用SALES表中的某些条件来过滤STOCK表的值。基于来自另一个表的值过滤mysql表

对于例如,如果我们在

STOCK表具有这些值:

A1 
A2 
A3 
A4 
A5 

SALES表

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

结果应该是:

A4 
A5 

而且,任何与出售并分配状态项目应从结果中移除。具有RETURNED状态的项目,SALES表格和尚未用于STOCK表格的项目应可用于输入。

我试着下面的代码,但问题是,一旦回的产品销售表重新进入售出或分配,但仍然得到到结果状态

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

嗨,如果你可以帮助我在** VIEW **中使用它,我将非常感谢,因为在SELECT中不允许使用子查询。 – Vishnu

相关问题