这两个查询是不同的,所以结果是不同的。
1)首先查询显示从a
所有行其不是(not exists
)在b
(a.id = b.id
)
2)第二查询显示从a
所有行具有在b
(exists
)至少一个不同的行(a.id <> b.id
)。
;WITH
a AS (SELECT * FROM (VALUES (10, 'a'),(20, 'b'),(30, 'c'),(40, 'd'),(50, 'e')) x(id, name)),
b AS (SELECT * FROM (VALUES (10, 'aa'),(30, 'aaa'),(50, 'aaaa')) x(id, name))
SELECT *,
CASE WHEN not exists(select * from b where a.id = b.id) THEN 1 ELSE 0 END AS Test1_NOT_EXISTS,
CASE WHEN exists(select * from b where a.id <> b.id) THEN 1 ELSE 0 END AS Test2_EXISTS,
(select top(1) b.id from b where a.id <> b.id) AS Test2_EXISTS_OneDifferentIDFromB
FROM a
输出:
/*
id name Test1_NOT_EXISTS Test2_EXISTS Test2_EXISTS_OneDifferentIDFromB
----------- ---- ---------------- ------------ --------------------------------
10 a 0 1 30
20 b 1 1 10
30 c 0 1 10
40 d 1 1 10
50
明白了...谢谢 – sam