2012-04-26 37 views
6

Tôi luôn sử dụng dấu ngoặc vuông trong truy vấn sql. Nhưng tôi có ví dụ:Postgresql và ngoặc vuông

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

Có bằng:

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

hay không?

Trả lời

8

Điều này phụ thuộc vào "ưu tiên toán tử logic" trong ngôn ngữ.

Trong postgresql, toán tử AND được ưu tiên hơn toán tử OR

Vì vậy, trong trường hợp của bạn, kết quả sẽ giống nhau.

Nhưng tôi nghĩ nó dễ dàng hơn và rõ ràng (bảo trì!) Để đặt dấu ngoặc đơn.

1

Điều này xảy ra theo Điều khoản nhà khai thác http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

Để tạo thành điều kiện phức tạp, tốt hơn hết là nên đặt dấu ngoặc đơn cho các điều kiện của bạn.

+0

phân tích tốt, nhưng ... kết luận sai về trường hợp cụ thể này, phải không? –

+1

6.5 là một phiên bản lỗi thời để tham khảo. – vyegorov

+1

http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS (hoặc/và các toán tử thay đổi ưu tiên có lẽ không phải là những thay đổi thông thường nhất, nhân tiện. ..) –

Các vấn đề liên quan