繁体   English   中英

SQL Server无法解析子查询

[英]Sql server not parsing Sub-query

我在SQL Server 2012中有以下查询,当运行整个查询时,该查询运行良好,但是内部查询没有单独运行,因为AdviceRecordID不属于tblB。

SELECT DISTINCT SubLOBID 
FROM tblA 
WHERE AdviceRecordID 
IN (SELECT AdviceRecordID
    FROM tblB
)

第一种情况是整个查询都在运行,根本没有考虑WHERE条件,而是重试了所有结果而没有任何错误,这对我来说很奇怪。

这按SQL标准的预期和要求运行。 如果子查询引用的子列在子查询的表中不可用,但在外部查询中是有效列,则使用外部查询的列中的值。

所以查询:

SELECT DISTINCT SubLOBID 
FROM tblA 
WHERE AdviceRecordID IN (SELECT AdviceRecordID
                         FROM tblB);

实际上是一个与co相关的子查询,并且被解析并执行为:

SELECT DISTINCT SubLOBID 
FROM tblA 
WHERE AdviceRecordID IN (SELECT tblA.AdviceRecordID
                         FROM tblB);

所以对于每一行tblA子查询返回的值tblA.AdviceRecordID在每一行一次tblB ,并比较了该规则的IN操作符。

这就是查询整体上有效的原因,并且其行为就像没有使用where子句一样,因为上述等效于:

SELECT DISTINCT SubLOBID 
FROM tblA 
WHERE AdviceRecordID IS NOT NULL;

并且,如果AdviceRecordID列中没有NULL值,则WHERE子句不会过滤掉任何内容。

最好使用EXISTS代替IN子句。

检查差异:

Difference1

Difference2

SELECT DISTINCT A.SubLOBID 
FROM tblA A
WHERE EXISTS 
(
    SELECT B.AdviceRecordID
    FROM tblB B
    WHERE B.AdviceRecordID=A.AdviceRecordID
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM