2012-04-26 15 views
6

Uso sempre le parentesi nelle query sql. Ma ho Esempio:Postgresql e parentesi

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

E 'pari a:

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

o no?

risposta

8

Questo dipende dalla "precedenza degli operatori logici" nella lingua.

in PostgreSQL, operatore AND ha la precedenza su operatore OR

Quindi nel tuo caso, il risultato sarà lo stesso.

Ma penso che sia molto più semplice e chiaro (manutenzione!) Mettere parentesi.

1

Funziona secondo la precisione dell'operatore http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

Per creare una condizione complessa è sempre meglio paragonare le condizioni.

+0

buona analisi, ma ... conclusione sbagliata su questo caso particolare, no? –

+1

6.5 è una versione un po 'obsoleta per riferimento. – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (o/e le modifiche alla precedenza degli operatori probabilmente non sono le modifiche più comuni, tra l'altro. ..) –