gpt4 book ai didi

mysql - SQL 中的连接顺序是否重要(特定于 MySQL)- FROM 子句中的 NOT 表

转载 作者:行者123 更新时间:2023-11-29 02:14:00 25 4
gpt4 key购买 nike

这不是 this Q&A 的副本因为这里的问答涉及FROM子句中提到的表。哪个我的没有。

假设 FROM 子句中的表始终相同并且我永远不会更改它。添加连接的顺序重要吗?

我正在使用内部构建的查询生成器。 (是的,我知道已经有一些东西了,但这超出了问题的范围)。

我希望能够在我的脚本开头设置一些连接,然后根据条件设置一些连接,查询构建器从上到下将它们添加到查询中。不管它们在查询中的顺序如何,SQL 引擎都会优化连接的顺序吗?

例子:

SELECT a.col1, d.col2, c.col1, b.col3
FROM table1 A
INNER JOIN table2 B
ON B.a_id = A.id
LEFT JOIN table3 C
ON C.id = A.c_id
LEFT JOIN table4 D
ON D.id = C.d_id;

SELECT a.col1, d.col2, c.col1, b.col3
FROM table1 A
LEFT JOIN table4 D
ON D.id = C.d_id
INNER JOIN table2 B
ON B.a_id = A.id
LEFT JOIN table3 C
ON C.id = A.c_id;

在这里您可以看到,在脚本 (C) 中声明其从属表的连接之前,我已经声明了 table4 D 的连接。这重要吗?

最佳答案

简单的回答:不,您不能在声明对象之前引用表对象/别名。

mySQL 将在第二次查询时抛出错误。 ‘on 子句’中的未知列‘C.d_id’

所以是的......编译器不会提前查看它是否被稍后引用。它只知道顺序,然后它试图找出哪种连接方法是最好的。

SQLFiddle

*解决以下问题:无论查询中的顺序如何,SQL 引擎都会优化联接的顺序吗? *

是的,它会优化订单;但是“FROM”命令不能包含对表的引用,否则该表将无法编译。 (例如,参见上面的错误和链接)

关于mysql - SQL 中的连接顺序是否重要(特定于 MySQL)- FROM 子句中的 NOT 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43782913/

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