gpt4 book ai didi

sql - 具有两个左连接的 SQL 查询如何工作?

转载 作者:行者123 更新时间:2023-12-05 03:32:42 25 4
gpt4 key购买 nike

我需要帮助来理解左连接在下面的查询中是如何工作的。

共有三个表和两个左连接。

所以我的问题是,第二个左边的连接是在 customer 和 books 表之间,还是在第一个连接的结果和 books 表之间?

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;

最佳答案

好问题。

当涉及到外连接表时,它取决于 ON 子句中的谓词。只要遵守谓词,引擎就可以自由地重新排序提取和扫描索引或表。

在这种特殊情况下,有三个表:

  • 客户 (c)
  • 销售额
  • 书籍(b)

customers 是内部连接的,因此它成为驱动表;还有其他注意事项,但为简单起见,您可以认为这是首先读取的表。现在,哪个是第二个? 销售 还是 书籍

第一个连接谓词 c.id = s.customer_id 不在二级表之间建立任何关系;因此它不会影响先连接哪个表。

第二个连接谓词 s.book_id = b.id 使 books 依赖于 sales。因此,它决定sales是第二张表,books是最后一张。

最后一点:如果你理解依赖的概念,你可以使用一些肮脏的技巧来强制引擎按照你想要的顺序遍历表格。我不建议新手这样做,但如果在某个时候您意识到引擎没有按照您的意愿运行,您可以调整查询。

关于sql - 具有两个左连接的 SQL 查询如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70416802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com