Wai*_*ong 52 sql sql-server-2000
我有两张桌子
表A:
ID
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
表B:
ID
1
2
3
Run Code Online (Sandbox Code Playgroud)
我有两个要求:
我正在使用SQL Server 2000.
Tim*_*ter 89
你可以使用NOT IN:
SELECT A.* FROM A WHERE ID NOT IN(SELECT ID FROM B)
Run Code Online (Sandbox Code Playgroud)
但是,同时我更喜欢NOT EXISTS:
SELECT A.* FROM A WHERE NOT EXISTS(SELECT 1 FROM B WHERE B.ID=A.ID)
Run Code Online (Sandbox Code Playgroud)
还有其他选项,本文非常好地解释了所有优点和缺点:
我应该使用NOT IN,OUTER APPLY,LEFT OUTER JOIN,EXCEPT还是NOT EXISTS?
Mar*_*ers 27
对于您的第一个问题,至少有三种常用方法可供选择:
SQL看起来像这样:
SELECT * FROM TableA WHERE NOT EXISTS (
SELECT NULL
FROM TableB
WHERE TableB.ID = TableA.ID
)
SELECT * FROM TableA WHERE ID NOT IN (
SELECT ID FROM TableB
)
SELECT TableA.* FROM TableA
LEFT JOIN TableB
ON TableA.ID = TableB.ID
WHERE TableB.ID IS NULL
Run Code Online (Sandbox Code Playgroud)
根据您使用的数据库,每个数据库的性能可能会有所不同.对于SQL Server(不可为空的列):
NOT EXISTS和NOT IN谓词是搜索缺失值的最佳方法,只要两个列都是NOT NULL即可.
| 归档时间: |
|
| 查看次数: |
109870 次 |
| 最近记录: |