[英]sql INNER JOIN table variable ON VS. INNER JOIN (select) ON
[英]SQL INNER JOIN vs. WHERE ID IN(…) not the same results
這兩個查詢的結果使我感到驚訝。 我對兩個都抱有相同的期望。 我有兩個共享相同字段的表,但是沒有建立關系。 表( A
)具有字段EventID varchar(10)
,表( B
)具有字段XXNumber varchar(15)
。
從表中的值B
列XXNumber
在表中引用A
柱EventID
。 即使XXNumber
可以容納15個字符,但179K數據行中的任何一個都不超過10個字符。
因此,要求是:
“為避免表B和表A條目重復,如果表A中的XXNumber>“事件ID”號中包含XXNumber,則不應將其計數。
要查看我有多少條普通記錄,我首先運行了此查詢-稱為查詢alpha”
SELECT dbo.TableB.XXNumber FROM dbo.TableB WHERE dbo.TableB.XXNumber in
( select distinct dbo.TableA.EventId FROM dbo.TableA )
結果是5322行。
以下查詢-將其稱為查詢增量,如下所示:
SELECT DISTINCT dbo.TableB.XXNumber, dbo.TableB.EventId
FROM dbo.TableB INNER JOIN dbo.TableA ON dbo.TableB.XXNumber= dbo.TableB.EventId
haas返回了4308行。
結果行數不應該相同嗎?
WHERE ID IN ()
版本將選擇與列表中的每個不同值匹配的所有行(無論您是否對DISTINCT
編碼,都將內部選擇包含在內-都是無關緊要的)。 如果給定值多次出現在父表中,則將從子表中為子表中找到的單個值選擇多行。
INNER JOIN
版本將為每次成功的連接從父表中選擇每一行一次,因此,如果子表中有3行的值,父表中有2行,則結果中將有6行值。
要使它們“相同”,請將“ DISTINCT”添加到主選擇中。
為了解釋您所看到的內容,我們需要更多地了解您的實際數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.