替代NOT EXISTS

时间:2010-04-30 05:04:41

标签: sql tsql sybase

我有两个由ID列链接的表。我们将它们称为表A和表B.我的目标是找到表A中表B中没有记录的所有记录。例如:

**Table A:**  
ID    Value  
--    -------
1     value1  
2     value2  
3     value3  
4     value4

**Table B**  
ID    Value  
--    -------
1     x  
2     y  
4     z  
4     l

正如你所看到的,表B中不存在ID = 3的记录,所以我想要一个查询,它将从表A给出记录3.我目前的方式是AND NOT EXISTS (SELECT ID FROM TableB where TableB.ID = TableA.ID) ,但由于表格很大,因此表现非常糟糕。此外,当我尝试使用TableB.ID为null的Left Join时,它不起作用。有人可以提出替代方案吗?

3 个答案:

答案 0 :(得分:4)

尝试Not IN

AND tablea.id NOT In (SELECT ID FROM TableB)

查看更多http://www.java2s.com/Code/SQLServer/Select-Query/NOTIN.htm

答案 1 :(得分:1)

您可以将其替换为

SELECT 
  a.ID, 
  a.Value
FROM Table_A AS a
LEFT JOIN Table_B AS b ON a.ID = b.ID     
WHERE b.ID IS NULL

此解决方案应该比IN()EXISTS()替代方案更有效。来源here

答案 2 :(得分:0)

SELECT ID 
  FROM Table_A
EXCEPT
SELECT ID 
  FROM Table_B;