Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server,相关子查询中的多个条件_Sql_Sql Server_Tsql_Correlated Subquery - Fatal编程技术网

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

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

第二个查询存在:

4行受影响


据推测,两个查询都应该返回所有四行,但第一行没有返回;我不知道为什么只有第二个查询返回了四行。有人能帮忙吗?谢谢。

第一个查询返回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)