gpt4 book ai didi

mysql - 所有连接末尾的“where”子句

转载 作者:可可西里 更新时间:2023-11-01 08:03:13 26 4
gpt4 key购买 nike

假设我有如下 2 个 sql 查询,查询结果会有所不同吗?

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
WHERE B.IsActive = 1
INNER JOIN C ON B.ID = C.ID
WHERE C.IsActive = 1

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON B.ID = C.ID
WHERE B.IsActive = 1 AND C.IsActive = 1

最佳答案

您的第一个查询在语法上不正确。它需要重写:

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
WHERE B.IsActive = 1
INNER JOIN C ON B.ID = C.ID
WHERE C.IsActive = 1

现在更正后,如果我比较以下两个查询:

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID AND B.IsActive = 1
INNER JOIN C ON B.ID = C.ID AND C.IsActive = 1

预计执行计划:

enter image description here

对比

SELECT * FROM A
INNER JOIN B ON A.ID = B.ID
INNER JOIN C ON B.ID = C.ID
WHERE B.IsActive = 1 AND C.IsActive = 1

预计执行计划:

enter image description here

那么,它们是完全一样的:

  • 在最终输出/结果方面
  • 在性能和查询执行计划方面

注意:使用一种语法相对于另一种语法没有优势。这完全取决于个人喜好,方便您和您的团队。 SQL Server 的执行引擎会为您创建相同的执行计划,而不管您编写查询的方式如何。

关于mysql - 所有连接末尾的“where”子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384640/

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