左外連接和意外行計數:仔細觀察
在 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中文網其他相關文章!