我尝试在相关子查询中使用复合条件,但它没有返回预期的结果。你能看一下下面的例子,看看为什么第一个查询不能解决,但第二个查询工作了吗?
创建表格&填充行:
CREATE TABLE TestCase
(
Seq INT IDENTITY PRIMARY KEY,
ID INT,
Name VARCHAR(50)
)
INSERT INTO TestCase
VALUES
(100, 'MJ'),
(110, 'MJ'),
(120, 'AK'),
(130, 'AK')
第一次查询:
SELECT A.ID, A.Name FROM TestCase AS A
WHERE A.ID IN (SELECT ID FROM TestCase WHERE ID <> A.ID AND Name = A.Name)
(0行(s)受影响)
使用EXISTS进行第二次查询:
SELECT A.ID, A.Name FROM TestCase AS A
WHERE EXISTS (SELECT ID FROM TestCase WHERE ID <> A.ID AND Name = A.Name)
(4行(s)受影响)
据说,两个查询都应返回所有四行,但第一行不返回;我不确定为什么只有第二个查询返回四行。有人可以帮忙吗?谢谢。
答案 0 :(得分:2)
第一个查询返回0条记录的原因是因为您尝试将行的ID与子查询A.ID IN (...)
返回的行匹配,但子查询关联以排除所有ID等于当前记录{ {1}}。因此,(A.ID<>ID)
子句将始终评估为false。
第二个查询不是尝试将返回的行与A.ID匹配,而是仅存在具有不同ID但具有相同名称的行。