我需要幫助來理解左連接在下面的查詢中是如何作業的。
總共有三個表和兩個左連接。
所以我的問題是,第二個左連接是在客戶和書籍表之間還是在第一個連接的結果和書籍表之間?
SELECT c.id, c.first_name, c.last_name, s.date AS sale,
b.name AS book, b.genre
FROM customers c
LEFT JOIN sales s
ON c.id = s.customer_id
LEFT JOIN books b
ON s.book_id = b.id;
uj5u.com熱心網友回復:
好問題。
當涉及到外連接表時,它取決于ON子句中的謂詞。只要遵守謂詞,引擎就可以自由地對索引或表的提取和掃描重新排序。
在這種特殊情況下,有三個表:
- 客戶 (c)
- 銷售額
- 書籍 (b)
customers內部連接,所以它成為駕駛桌;還有其他注意事項,但為簡單起見,您可以認為這是首先讀取的表。現在,哪個是第二個?sales或者books?
第一個連接謂詞c.id = s.customer_id不建立二級表之間的任何關系;因此它不會影響首先加入哪個表。
第二加入謂詞s.book_id = b.id品牌books依賴sales。因此,它決定sales是第二個表,并且books是最后一個。
最后一點:如果你理解依賴的概念,你可以使用幾個骯臟的技巧來強制引擎按照你想要的順序遍歷表格。我不建議新手這樣做,但是如果在某個時候您意識到引擎沒有按照您的意愿進行操作,您可以調整查詢。
uj5u.com熱心網友回復:
第二個 join 陳述句指定s.book_id = b.id在 s 是銷售而 b 是書籍的地方加入。但是,除非在 sales AND customers 表中有相應的記錄,否則不會回傳 books 表中的記錄,根據定義https://www.w3schools.com/sql/sql_join_left.asp,這是左聯接所做的。換句話說,此查詢將回傳至少一個客戶購買過的所有書籍(并且多次購買的書籍將多次出現在結果中)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387405.html
標籤:sql
上一篇:SQL查詢。如何按月計算條目數
