gpt4 book ai didi

sql - 当使用 LEFT(外部)连接时,连接中表的顺序是否重要?

转载 作者:行者123 更新时间:2023-11-29 11:20:32 28 4
gpt4 key购买 nike

我想确认SQL查询

SELECT ....
FROM apples,
oranges
LEFT JOIN kiwis ON kiwis.orange_id = oranges.id,
bananas
WHERE ....

完全等同于 FROM 子句中的其他排列,例如

SELECT ....
FROM oranges
LEFT JOIN kiwis ON kiwis.orange_id = oranges.id,
bananas,
apples
WHERE ....

SELECT ....
FROM bananas,
apples,
oranges
LEFT JOIN kiwis ON kiwis.orange_id = oranges.id
WHERE ....

只要 oranges 和 kiwis 之间的显式 LEFT JOIN 保持不变。从我在各种文档中阅读的内容来看,返回的集合应该完全相同。

我真的只关心查询的结果,而不关心它在实际数据库中的性能。 (我使用的是 PostgreSQL 8.3,AFAIK 不支持有关连接顺序的优化器提示,并将尝试自动创建最佳查询计划)。

最佳答案

它是一样的,但它与隐式 CROSS JOINs 一样模棱两可。使用显式 JOINS。

如果您在 WHERE 子句中联接,则结果可能不同,因为联接和过滤器混淆了。

SELECT ....
FROM apples a
JOIN
bananas b ON ...
JOIN
oranges o ON ...
LEFT JOIN
kiwis k ON k.orange_id = o.id
WHERE (filters only)

注意事项:

  • INNER JOINS 和 CROSS JOINS 是可交换和关联的:顺序通常无关紧要。
  • OUTER JOINS 不是,您确定
  • SQL 是声明式的:您告诉优化器您想要什么,而不是如何去做。这消除了 JOIN 订单注意事项(受前 2 项影响)

关于sql - 当使用 LEFT(外部)连接时,连接中表的顺序是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009573/

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