首頁 > 資料庫 > mysql教程 > 為什麼我的 SQL LEFT OUTER JOIN 傳回的行數多於左表?

為什麼我的 SQL LEFT OUTER JOIN 傳回的行數多於左表?

Linda Hamilton
發布: 2025-01-25 01:17:09
原創
726 人瀏覽過

Why Does My SQL LEFT OUTER JOIN Return More Rows Than the Left Table?

理解 SQL LEFT OUTER JOIN:為什麼行數比左表多?

關於 LEFT OUTER JOIN 的一個常見誤解是它總是返回左表中的確切行數。 雖然它包含左表中的所有行,但如果右表中存在重複匹配,它實際上可以生成更多行。

讓我們用一個例子來說明這一點:

考慮這個查詢:

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
登入後複製

此查詢旨在將 Susp_Visits(左表)與 Dim_Member(右表)連接起來。 直觀上,人們可能期望最多 4935 行(假設這是 Susp_Visits 的計數)。然而,實際結果可能會更大。

原因是 LEFT OUTER JOIN 在結果集中為左表和右表之間的 每個 匹配創建一行。 如果 Susp_Visits 中的單行與 Dim_Member 中的多行匹配,它將在輸出中重複,從而導致比最初預期的行數更多。

因此,如果LEFT OUTER JOIN後的行數大於預期,則表明根據連接條件,左表中至少有一行在右表中有多個對應的行。

解決這個問題:

  • 只需要左表數據? ​​只需在左表上使用 SELECT 語句,無需任何連接。
  • 消除重複項? ​​在 DISTINCT 語句中添加 SELECT 子句:SELECT DISTINCT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID ... 這將從結果集中刪除重複的行。

這澄清了LEFT OUTER JOIN的行為,並提供了處理結果集超出左表行數的情況的解決方案。

以上是為什麼我的 SQL LEFT OUTER JOIN 傳回的行數多於左表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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