簡體   English   中英

SQL INNER JOIN與WHERE ID IN(…)結果不一樣

[英]SQL INNER JOIN vs. WHERE ID IN(…) not the same results

這兩個查詢的結果使我感到驚訝。 我對兩個都抱有相同的期望。 我有兩個共享相同字段的表,但是沒有建立關系。 表( A )具有字段EventID varchar(10) ,表( B )具有字段XXNumber varchar(15)

從表中的值BXXNumber在表中引用AEventID 即使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM