[英]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
子句。
檢查差異:
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.