首頁 >資料庫 >mysql教程 >為什麼我的左外連接回傳的記錄比左表多?

為什麼我的左外連接回傳的記錄比左表多?

Barbara Streisand
Barbara Streisand原創
2025-01-25 01:11:08139瀏覽

Why Does My Left Outer Join Return More Records Than the Left Table?

左外連接和意外行計數:仔細觀察

在 SQL 數據庫中,左外連接組合來自兩個表的數據,保證結果集中包含左表中的所有行。 然而,一個常見的誤解是輸出總是與左表具有相同的行數。這不一定是真的。

左外連接的行為是將左表中的每一行與右表中的相應行進行匹配。 如果找到匹配項,則兩個表中的數據將合併為一行。 至關重要的是,如果在右表中找到左表中給定行的no 匹配項,則該左表行仍包含在結果中,但右表中的列具有NULL值.

當左表中的單行與右表中的多個行匹配時,就會出現差異。 在這種情況下,左外連接將在輸出中生成多行,右側每匹配一行,導致行數超過原始左表的行數。

讓我們用一個 SQL 查詢示例來說明:

<code class="language-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</code>

此查詢旨在僅從 SUSP.Susp_Visits 檢索數據。 但是,如果 MemID 中的 SUSP.Susp_Visits 對應於 DATA.Dim_Member 中的多個條目,則結果將包含每個此類 SUSP.Susp_Visits 行的多行。

為了避免這種膨脹的行數並僅檢索左表中的數據,最好使用更簡單的查詢:

<code class="language-sql">SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits</code>

這種直接查詢可以有效地檢索所需的數據,而在處理表之間的一對多關係時,不會出現左外連接行為固有的行計數差異。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn