2016-07-14 25 views
1

我想有以下性质的查询:如何在mysql查询where子句中提供比OR更高的优先级?

"SELECT * FROM table1 where column1=1 OR column2=1 OR column3=1 AND column4=1 OR column5=1"; 

根据运算符优先级,和动作将首先执行,然后OR操作。但在我的情况下,我希望 column1 = 1或column2 = 1或column3 = 1 - > this和 column4 = 1或column5 = 1 - >这是首先执行,并从这些结果由AND操作最后结果。

我可以像大多数编程语言一样只添加括号来获得更高的OR优先级吗?或者这是如何完成的?

+0

括号会做。 –

+1

搜索“mysql运算符优先级”后,最终结果如何?我最终[这里](http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html):“要明确地覆盖这个顺序和组术语,使用括号” –

回答

1

您需要使用括号和包装每个部分,像这样:

SELECT * FROM table1 
where (column1=1 OR column2=1 OR column3=1) AND (column4=1 OR column5=1) 
1

您可以添加括号。此外,您可以使用IN表示逻辑:

SELECT * 
FROM table1 
WHERE 1 IN (column1, column2, column3) AND 1 IN (column4, column5); 
+0

我也是关于将OP修正为'括号',然后我想起[BODMAS](http://www.skillsyouneed.com/num/bodmas.html)! – onedaywhen

+0

@onedaywhen。 。 。我们美国人称他们为“圆括号”,但我们理解其他方言;)维基百科对此主题进行了广泛的讨论:https://en.wikipedia.org/wiki/Bracket。我倾向于将“括号”视为括号的超集。 –

+1

显然,BODMAS的美国等值是PEDMAS(括号,指数,除法和乘法,加法和减法)。我想英国的软件工程师往往会称他们为parens。 – onedaywhen