2016-07-14 69 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