2012-04-26 18 views
6

Zawsze używam nawiasów w zapytaniach sql. Ale mam przykład:PostgreSQL i nawiasy

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

Czy jest równa:

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

czy nie?

Odpowiedz

8

Jest to zależne od "pierwszeństwa operatorów logicznych" w danym języku.

W PostgreSQL, operator ma pierwszeństwo przed lub operator

Więc w twoim przypadku, wynik będzie taki sam.

Ale myślę, że to dużo łatwiejsze i jasne (konserwacja!), Aby umieścić nawiasy.

1

Działa według operatora Precision http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

Aby utworzyć złożony warunek, zawsze lepiej nawiązywać do warunków.

+0

Dobra analiza, ale ... błędny wniosek w tej konkretnej sprawie, nie? –

+1

6.5 jest nieco przestarzałą wersją do odniesienia. – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (i/lub zmiany priorytetów operatorów nie są chyba najbardziej typowymi zmianami, przy okazji. ..) –