Mysql 如何在SQL语句中组合and和OR
我有以下SQL语句:Mysql 如何在SQL语句中组合and和OR,mysql,sql,Mysql,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;
我已经读到我可以用括号来完成这一点,但我想知道这是否有效:
SELECT * FROM `table` WHERE (type = 3 OR type = 5 OR type = 4) and table.deleted = 1;
或
这两种方法都是有效的,但它们的含义不同:
- 第一个带括号的查询将拾取类型为3、4、5的已删除行
- 您的第二个括号查询将选择类型为3、5的所有行,以及类型为4的已删除行;这与没有括号的原始查询中的含义相同
,可以完全避免混淆,如下所示:
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)
这两种方法都是有效的,但它们的含义不同:
- 第一个带括号的查询将拾取类型为3、4、5的已删除行
- 您的第二个括号查询将选择类型为3、5的所有行,以及类型为4的已删除行;这与没有括号的原始查询中的含义相同
通过在
中使用运算符,可以完全避免混淆,如下所示:
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)
您需要的是类似于操作员的
SELECT * FROM `table`
WHERE type IN ( 3, 5, 4) and deleted = 1;
您需要的是类似于操作员的
SELECT * FROM `table`
WHERE type IN ( 3, 5, 4) and deleted = 1;
和
的值高于或
,因此第一个和第三个过滤器相当于:
type = 3 OR type = 5 OR (type = 4 and table.deleted = 1)
您的第二个筛选器可以使用()中的IN
等效表示:
和
的值高于或
,因此第一个和第三个过滤器相当于:
type = 3 OR type = 5 OR (type = 4 and table.deleted = 1)
您的第二个筛选器可以使用()中的IN
等效表示:
有一种简单的方法可以测试您的SQL是否有效-尝试执行它。有一种简单的方法可以测试您的SQL是否有效-尝试执行它。感谢您的回复,实际上我想要的是首先确保我选择了被删除的SQL(在未来的项目中,我必须首先检查是否已删除=0,因此我只选择未删除的项目)然后我检查类型。根据你关于优先级的说法,似乎我在句首或句尾将AND deleted=1放在哪里并不重要,对吗?eggyal说的是@dasblinkenlight吗?我也认为它们的顺序正确。@eggyal的“第一个查询”是指“第一个括号内的查询”,因此正在进行一些重新编号。我编辑以使其明确。@SaulOrtega这可能令人困惑。我编辑以解释“第一”和“第二”的含义。对于第一个查询,它将首先检查行是否已删除=1,然后检查类型,因为您说过它具有更高的优先级,对吗?谢谢您的回答,实际上我想要的是首先确保选择已删除的行(在未来的项目中,我必须首先检查是否已删除=0,因此我只选择未删除的项目)然后我检查类型。根据你关于优先级的说法,似乎我在句首或句尾将AND deleted=1放在哪里并不重要,对吗?eggyal说的是@dasblinkenlight吗?我也认为它们的顺序正确。@eggyal的“第一个查询”是指“第一个括号内的查询”,因此正在进行一些重新编号。我编辑以使其明确。@SaulOrtega这可能令人困惑。我编辑以解释“第一”和“第二”的含义。对于第一个查询,它将首先检查行是否被删除=1,然后检查类型,因为您说过它具有更高的优先级,对吗?谢谢eggyal,我认为它们是向后正确的?第一个用于第二个查询,第二个用于第一个查询,对吗?@SaulOrtega:您的#1和#3与我的#1相同。您的#2和我的#2是t他是一样的。谢谢eggyal,我认为他们是反向正确的?第一个是第二个,第二个是第一个查询,对吗?@SaulOrtega:你的1和3与我的1相同。你的2和我的2相同。