SQL Server,相关子查询中的多个条件

时间:2011-04-17 07:19:42

标签: sql sql-server tsql correlated-subquery


我尝试在相关子查询中使用复合条件,但它没有返回预期的结果。你能看一下下面的例子,看看为什么第一个查询不能解决,但第二个查询工作了吗?

创建表格&填充行:

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)受影响)

据说,两个查询都应返回所有四行,但第一行不返回;我不确定为什么只有第二个查询返回四行。有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:2)

第一个查询返回0条记录的原因是因为您尝试将行的ID与子查询A.ID IN (...)返回的行匹配,但子查询关联以排除所有ID等于当前记录{ {1}}。因此,(A.ID<>ID)子句将始终评估为false。

第二个查询不是尝试将返回的行与A.ID匹配,而是仅存在具有不同ID但具有相同名称的行。