gpt4 book ai didi

mysql - mysql 如何解释/分组中间有 OR 语句的重复 WHERE 语句?

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:33 24 4
gpt4 key购买 nike

我正在使用 Laravel 的 ORM。它正在生成一个巨大的查询,在该查询中我注意到有一个重复的 WHERE 语句,并且该 WHERE 语句的顺序似乎非常重要。我相信这与 MySQL 如何对 WHERE 语句进行分组有关,但我不了解 MySQL 的工作原理。我试图理解为什么它会这样工作。 mysql 如何解释/分组这个?

表格

items
-----------------------------------------------
id | status
-----------------------------------------------
19 | 1
20 | 0
21 | 1

需要的结果:

-----------------------------------------------
id | status
-----------------------------------------------
19 | 1
21 | 1

查询比这长得多。但这里是 ORM 生成的代码,它产生了上述所需的结果:

SELECT * FROM campaigns WHERE status = 1 OR id IN ('20') AND status = 1 ORDER BY id DESC;

如果我删除最后一个 status = 1,查询不会返回所需的结果。 MySQL 是否像这样对 WHERE 语句进行分组:

SELECT * FROM campaigns WHERE status = 1 OR (id IN ('20') AND status = 1);

ORM 生成的查询有几页那么长,所以如果没有括号,读起来会很困惑。看来 MySQL 是这样分组的。我想我不太了解 MySQL 的工作原理。有什么书籍推荐可以更好地理解 MySQL?

构建查询/尝试了解 MySQL 在做什么

1)

SELECT * FROM items WHERE status = 1

结果

-----------------------------------------------
id | status
-----------------------------------------------
19 | 1
21 | 1

2)

SELECT * FROM items WHERE status = 1 OR id IN ('20')

结果

-----------------------------------------------
id | status
-----------------------------------------------
19 | 1
20 | 0
21 | 1

3)

SELECT * FROM items WHERE status = 1 OR id IN ('20') AND status = 1

结果

-----------------------------------------------
id | status
-----------------------------------------------
19 | 1
21 | 1

最佳答案

AND 优先于 OR,另见 SQL Logic Operator Precedence: And and Or .

对于你的例子,这意味着

SELECT * FROM campaigns WHERE status = 1 OR id IN ('20') AND status = 1 ;

被自动解释为

SELECT * FROM campaigns WHERE status = 1 OR (id IN ('20') AND status = 1);

即使你不加括号。

总是写括号是个好主意,即使您知道不需要它们,也可以让您代码的其他读者(以及编译器/解释器,如果需要)。

关于mysql - mysql 如何解释/分组中间有 OR 语句的重复 WHERE 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38271716/

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