我在思考如何编写我需要的查询时遇到了问题。 我将举例说明我要做的事情。
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不正确,但不是。
数字和条款仅供参考。 感谢。
答案 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)