我有一个名为sales
的表,其中包含以下几列:
salesno (PK, char(25))
advanceno (char(15), not null)
现在我要选择salesno
中advanceno
不在的所有行:
SELECT salesno
FROM sales
WHERE salesno NOT IN (SELECT advanceno FROM sales)
查询很慢,因为sales表有几十万行。
我这样做了,速度非常快:
SELECT salesno
FROM sales
WHERE salesno NOT IN ('000008360', '000008361', '000008362', '000008363', '000008364')
如何优化查询?
答案 0 :(得分:4)
试试这个:
DECLARE @sales as Table (salesno char(25)
,advanceno char(15) not null)
INSERT INTO @sales(salesno,advanceno)
SELECT '000008360','000008360' UNION ALL
SELECT '000008361','000008362' UNION ALL
SELECT '000008362','000008364'
SELECT s.salesno
FROM @sales s
LEFT JOIN @sales a ON a.advanceno = s.salesno
WHERE a.advanceno IS NULL
在你的例子中,试试这个
SELECT s.salesno
FROM sales s
LEFT JOIN sales a ON a.advanceno = s.salesno
WHERE a.advanceno IS NULL