有问题使用和/或在mysql查询

时间:2014-07-22 16:58:47

标签: mysql sql

我在思考如何编写我需要的查询时遇到了问题。 我将举例说明我要做的事情。

SELECT * FROM table WHERE clause1 = 10 AND clause2 = 20 AND clause3 = 30 || 40

我需要选择条款,其中子句1必须正好为10,而子句2必须正好为20,但是子句3可以是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不正确,但不是。

数字和条款仅供参考。 感谢。

2 个答案:

答案 0 :(得分:3)

您必须使用括号并绕过最后一个条件并使用两次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()。

答案 1 :(得分:2)

使用IN。

SELECT * 
FROM table
WHERE clause1=10 AND clause2=20 AND
clause3 in (30,40)