首頁 > 資料庫 > mysql教程 > 左外連接拼圖:為什麼結果比左表記錄更多?

左外連接拼圖:為什麼結果比左表記錄更多?

DDD
發布: 2025-01-25 01:26:09
原創
510 人瀏覽過

LEFT OUTER JOIN Puzzle: Why More Results Than Left Table Records?

LEFT OUTER JOIN 難題:記錄數超過左表?

雖然普遍認為 LEFT OUTER JOIN 總是返回左表的所有記錄,但一位用戶卻對查詢返回的結果數量超過預期感到困惑。

有問題的 SQL 查詢:

SELECT     
    SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM
    SUSP.Susp_Visits 
LEFT OUTER JOIN
    DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
登入後複製

揭開真相:

誤解在於假設 LEFT OUTER JOIN 只會為左表中不匹配的行返回 NULL 值。實際上,它會返回所有匹配的行,即使右表中的多行與左表中的一行匹配也是如此。

示例說明:

考慮以下表格:

**Susp_Visits** **Dim_Member**
MemID: 1 MembershipNum: 1
MemID: 1 MembershipNum: 2
MemID: 2 MembershipNum: NULL

基於 MemID 的 LEFT OUTER JOIN 將產生以下結果:

**SuspReason****SiteID****MembershipNum**
111
112
22NULL

正如您所看到的,Susp_Visits.SuspReason 為 1 的行被重複,因為它與 Dim_Member 中的兩行匹配。

替代方法:

如果所需結果只是檢索左表中唯一行,則不需要 LEFT OUTER JOIN。只需從左表中進行簡單的 SELECT 即可:

SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits
登入後複製

以上是左外連接拼圖:為什麼結果比左表記錄更多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板