2012-04-26 84 views
6

我總是在sql查詢中使用括號。但我有例如:Postgresql和括號

DELETE FROM prog 
WHERE prog_start >= $1 AND prog_start < $2 
    OR prog_end > $1 AND prog_end <= $2 

是否等於:

DELETE FROM prog 
WHERE (prog_start >= $1 AND prog_start < $2) 
    OR (prog_end > $1 AND prog_end <= $2) 

與否?

回答

8

這取決於語言中的「邏輯運算符優先級」。

在PostgreSQL和經營者接管優先級或操作

所以你的情況,其結果將是相同的。

但我認爲這樣更容易,並且明確(維護!)來放圓括號。

1

它按照運營商優先級 http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615

要形成一個複雜的條件,最好能夠括住你的條件。

+0

良好的分析,但...在這個特殊情況下的錯誤結論,不是嗎? – 2012-04-26 10:49:49

+1

6.5是一個過時的版本以供參考。 – vyegorov 2012-04-26 10:54:59

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (或/和運算符優先級的變化可能不是最常見的變化,順便說一下。 ..) – 2012-04-26 10:57:38