兩次加入同一個表:全面探索
在本次討論中,我們解決了開發人員面臨的一個常見困境:高效加入同一個表表多次。挑戰在於取得包含兩個連接條件的資料的結果集。
考慮以下表格結構:
*Table1* ID PhoneNumber1 PhoneNumber2 *Table2* PhoneNumber SomeOtherField
目標是擷取 PhoneNumber1、PhoneNumber1、PhoneNumber2 對應的 SomeOtherField ,以及PhoneNumber2對應的SomeOtherField。
方法一:多表連接
此方法涉及在表上連接兩次:
SELECT t1.PhoneNumber1, t1.PhoneNumber2, t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2 FROM Table1 t1 INNER JOIN Table2 t2 ON t2.PhoneNumber = t1.PhoneNumber1 INNER JOIN Table2 t3 ON t3.PhoneNumber = t1.PhoneNumber2
此方法涉及在表上連接兩次:
此方法可靠,但顯得有點冗長。
方法2:OR -Based Joining
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
為了簡化查詢,開發人員建議使用OR ON 條件中的子句:
但是,這種方法在SQL 中無效,會導致錯誤。
最佳實踐
在這種情況下,建議使用方法 1,因為它清晰且可靠。值得注意的是,強烈建議重構表以避免使用自然按鍵(例如電話號碼)。自然鍵很容易發生變化,從而導致維護過程具有挑戰性。 多次連接同一個表時,別名對於可讀性和易於理解至關重要。別名有助於區分錶的多個實例。SELECT t.PhoneNumber1, t.PhoneNumber2, t1.SomeOtherFieldForPhone1, t2.someOtherFieldForPhone2 FROM Table1 t JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1 JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
以上是如何在SQL中有效率地兩次連接同一個表以從多個連接條件中檢索資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!