首頁 >資料庫 >mysql教程 >如何有效率地對三個表執行 MySQL LEFT JOIN?

如何有效率地對三個表執行 MySQL LEFT JOIN?

Susan Sarandon
Susan Sarandon原創
2025-01-02 22:22:39621瀏覽

How to Efficiently Perform a MySQL LEFT JOIN with Three Tables?

理解具有三個表的 MySQL LEFT JOIN

問題描述

考慮三個表:

  • Persons (PersonID,名稱,SS):包含相關的資訊
  • 恐懼(FearID、Fear):列出不同的恐懼。
  • Person_Fear(ID、PersonID、FearID):將個人與其相關的恐懼連結起來。

目的是顯示所有個人以及與他們相關的任何恐懼(包括一個人沒有恐懼的情況)

分析查詢問題

提供的查詢顯示了錯誤的連接表架構:

SELECT persons.name, 
       persons.ss, 
       fears.fear 
FROM   persons 
       LEFT JOIN fears 
              ON person_fear.personid = person_fear.fearid 

ON 子句錯誤地嘗試連接Person_Fear 表PersonID 而不是FearID,它是連接到 Fears 的欄位。

改進解決方案

要有效地執行左連接,請考慮以下方法:

SELECT Persons.Name, Persons.SS, Fears.Fear
FROM Persons
LEFT JOIN Person_Fear
    INNER JOIN Fears
    ON Person_Fear.FearID = Fears.FearID
ON Person_Fear.PersonID = Persons.PersonID

說明:

  • Persons 表已離開在Person_Fear.PersonID = 上加入Person_Fear Persons.PersonID。
  • 嵌套的 INNER JOIN 將 Person_Fear 連接到 Person_Fear.FearID = Fears.FearID 上的 Fears。
  • 此結構可確保包含所有 Persons 記錄,即使是那些沒有關聯恐懼的記錄。

替代方案查詢:

另一種獲得相同結果的方法是:

SELECT Persons.Name, Persons.SS, Fears.Fear
FROM Persons
LEFT JOIN Person_Fear ON Person_Fear.PersonID = Persons.PersonID
LEFT JOIN Fears ON Person_Fear.FearID = Fears.FearID

此查詢使用兩個左連接來連接表,產生類似的結果。

以上是如何有效率地對三個表執行 MySQL LEFT JOIN?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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