SQL Server,相关子查询中的多个条件
我试图在相关子查询中使用复合条件,但它没有返回预期的结果。你能看看下面的例子,看看为什么第一个查询不成功,而第二个查询成功了吗 创建表并填充行: 第一个问题: 0行受影响 第二个查询存在: 4行受影响SQL Server,相关子查询中的多个条件,sql,sql-server,tsql,correlated-subquery,Sql,Sql Server,Tsql,Correlated Subquery,我试图在相关子查询中使用复合条件,但它没有返回预期的结果。你能看看下面的例子,看看为什么第一个查询不成功,而第二个查询成功了吗 创建表并填充行: 第一个问题: 0行受影响 第二个查询存在: 4行受影响 据推测,两个查询都应该返回所有四行,但第一行没有返回;我不知道为什么只有第二个查询返回了四行。有人能帮忙吗?谢谢。第一个查询返回0条记录的原因是您试图将该行的ID与子查询返回的行A.ID(位于…)相匹配,但子查询关联以排除所有与当前记录A.IDID相等的ID。因此,WHERE IN子句的计算结果总
据推测,两个查询都应该返回所有四行,但第一行没有返回;我不知道为什么只有第二个查询返回了四行。有人能帮忙吗?谢谢。第一个查询返回0条记录的原因是您试图将该行的ID与子查询返回的行A.ID(位于…)相匹配,但子查询关联以排除所有与当前记录A.IDID相等的ID。因此,WHERE IN子句的计算结果总是false
第二个查询没有尝试将返回的行与A.ID进行匹配,只是存在一个具有不同ID但名称相同的行。+1必须多次读取该行才能真正获取它,但现在有意义了。我不喜欢或不理解否定条件的另一个原因。。。
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)
SELECT A.ID, A.Name FROM TestCase AS A
WHERE EXISTS (SELECT ID FROM TestCase WHERE ID <> A.ID AND Name = A.Name)