我在思考如何编写我需要的查询时遇到问题。 我会给你一个我正在尝试做的例子..
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30||40
我需要选择条目,其中 clause1 必须正好是 10,clause2 必须正好是 20,但 clause3 可以是 30 或 40,但必须正好是 30 或正好是 40。
所以它会选择条目,如果它是 10,20,30 或 10,20,40
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30 OR clause3=40 是不正确的,不是吗。
数字和条款仅供引用。 谢谢。
最佳答案
你必须在你的最后一个条件周围使用括号并使用两次clause3=
:
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND (clause3=30 || clause3=40)
或
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3 IN (30, 40)
注意
我建议使用运算符 OR
而不是 ||
,因为在其他 SQL 方言(即 Oracle、Postgres)中 ||
是串联运算符。 OR 是标准 SQL。所以第一条语句最好写成:
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND (clause3=30 OR clause3=40)
解释
运算符AND
的优先级高于OR
。如果没有括号,表达式将对以下两个语句进行相同的计算
SELECT * FROM table WHERE clause1=10 AND clause2=20 AND clause3=30 OR clause3=40
SELECT * FROM table WHERE (clause1=10 AND clause2=20 AND clause3=30) OR clause3=40
这不是你想要的。因此,要么在 OR 表达式周围加上括号,要么使用更简单的 IN()。
关于mysql - 在 mysql 查询中使用和/或有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893369/