2012-04-26 23 views
6

Siempre utilizo corchetes en las consultas SQL. Pero tengo ejemplo:Postgresql y corchetes

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

¿es igual a:

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

no?

Respuesta

8

Esto depende de la "precedencia de operadores lógicos" en el idioma.

en PostgreSQL, operador AND tiene prioridad sobre el operador OR

Así, en su caso, el resultado será el mismo.

Pero creo que es mucho más fácil y claro (¡mantenimiento!) Poner paréntesis.

1

Va según la Precendencia del operador http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

Para formar una condición compleja siempre es mejor paréntesis de sus condiciones.

+0

buen análisis, pero ... conclusión equivocada en este caso particular, ¿no? –

+1

6.5 es una versión un poco obsoleta para referencia. – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (y/y los cambios de precedencia de los operadores probablemente no sean los cambios más comunes, por cierto. ..) –