gpt4 book ai didi

SQL - 这些连接之间的区别?

转载 作者:太空狗 更新时间:2023-10-30 01:48:37 25 4
gpt4 key购买 nike

我现在应该知道这一点了,但是下面两个陈述之间的区别是什么?

嵌套连接:

SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
ON t2.table2_ID = t1.table1_ID

更传统的连接:

SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID

最佳答案

嗯,这是操作顺序..

SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
ON t2.table2_ID = t1.table1_ID

可以重写为:

SELECT
t1.*
FROM
table1 t1 -- inner join t1
INNER JOIN
(table2 t2 LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID) -- with this
ON t2.table2_ID = t1.table1_ID -- on this condition

基本上,首先根据连接条件将 t2 与 t3 进行左连接:table3_ID = table2_ID,然后在 table2_ID = table1_ID 上将 t1 与 t2 进行内连接。

在您的第二个示例中,您首先将 t1 与 t2 进行内部联接,然后在条件 table2_ID = table1_ID 下将生成的内部联接与表 t3 进行左联接。

SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID

可以重写为:

SELECT
t1.*
FROM
(table1 t1 INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID) -- first inner join
LEFT JOIN -- then left join
table3 t3 ON t3.table3_ID = t2.table2_ID -- the result with this

编辑

我道歉。我的第一句话是错误的。这两个查询将产生相同的结果,但在性能上可能存在差异,因为在某些情况下(当表 1 仅包含表 2 中的元素的子集时)第一个查询的执行速度可能比第二个查询慢,因为 LEFT JOIN 将首先执行 - 然后才与 table1 相交。与允许查询优化器完成其工作的第二个查询相反。

关于SQL - 这些连接之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1094585/

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