2012-04-26 19 views
6

Her zaman sql sorgularında parantezler kullanırım. Ama örnek var:Postgresql ve parantezler

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

ya da değil:

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

o eşit midir?

cevap

8

Bu, dildeki "mantıksal işleçlerin önceliği" ne bağlıdır. postgresql olarak

VE operatörü senin durumunda önceliklidir OR operatörünü Yani

alır, sonuç aynı olacaktır.

Ancak parantezleri daha kolay ve temiz (bakım!) Olduğunu düşünüyorum.

1

O Operatör precendence http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615 göre gider.

Karmaşık bir durum oluşturmak için koşullarınızı parantez içinde her zaman daha iyidir.

+0

iyi bir analiz, ama ... bu özel durum hakkında yanlış sonuç yok, hayır? –

+1

6.5 referans vermek için biraz eski versiyonudur. – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (veya/veya işleçlerin önceliği değişiklikleri, muhtemelen bu arada en yaygın değişiklikler değildir. ..) –