簡體   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