小编典典

如何在我的SQL语句中组合AND和OR

sql

我有以下SQL语句:

SELECT * FROM `table` WHERE type = 3 OR type = 5 OR type = 4 and table.deleted = 1;

我读过我可以使用括号来完成此操作,但我想知道这是否有效:

SELECT * FROM `table` WHERE (type = 3 OR type = 5 OR type = 4) and table.deleted = 1;

或者

SELECT * FROM `table` WHERE (type = 3 OR type = 5) OR type = 4 and table.deleted = 1;

阅读 210

收藏
2021-04-14

共1个答案

小编典典

这两个都是有效的,但是由于AND优先级高于OR,因此它们的含义有所不同:

  • 您的第一个带括号的查询将选择类型为3、4、5的已删除行
  • 第二个带括号的查询将选择类型为3、5的所有行,以及类型为4的已删除行。这与不带括号的原始查询的含义相同。

您可以使用operator完全避免混淆IN,如下所示:

SELECT * FROM `table` WHERE type IN (3, 4, 5) AND table.deleted = 1;

或者如果您想要第二个意思

SELECT * FROM `table` WHERE type IN (3, 5) OR (type = 4 AND table.deleted = 1)
2021-04-14