我有2个表:在SQL SERVER “NOT IN” 的替代
- 百货商店表(保存百货商店的数据):
- AccDocSales表(由系由令保存数据):
现在,我想选择这些部门,它不会在每个MONTH的AccDocSales表中显示(这意味着哪个部门每个MONTH的AccDocSales表中没有DeptCode)。
EX(这种情况下):
我用这个查询:此查询
SELECT distinct MONTH(DocDate) as THANG, B20Dept.Code, B20Dept.Name
FROM B20Dept, B30AccDocSales S1
WHERE YEAR(S1.DocDate) = 2014 AND B20Dept.Code NOT IN
(
SELECT S2.DeptCode
FROM B30AccDocSales S2, B20Dept
WHERE YEAR(S2.DocDate) = 2014 AND S2.DeptCode = B20Dept.Code
AND MONTH(S1.DocDate) = MONTH(S2.DocDate)
)
ORDER BY MONTH(DocDate)
它的工作,但我的老师说: “NOT IN” 是不是可以接受的。他问我找到另一种方法来做到这一点,没有“IN”,“NOT IN”。
PS:我发现这个查询还有一个问题。这是哪个月在“DeptCode”中的所有部门,哪个月没有行,它们在运行该查询时都不会显示任何结果。
请帮忙。
简单'JOIN'可以做。 –
尝试使用“不存在”。 –
看到那里:http://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join –