PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận lại cùng một kết quả khi cố gắng tìm các dữ liệu khác nhau

Vấn đề của bạn là thiếu dấu ngoặc:Trong SQL AND được ưu tiên hơn OR , vì vậy bạn cần đặt dấu ngoặc quanh toàn bộ biểu thức trước đó của mình:

SELECT * FROM dim_date
WHERE ( -- added bracket
 EXTRACT (MONTH FROM date_cal) BETWEEN 3 AND 5
 OR (EXTRACT (MONTH FROM date_cal) = 2 AND EXTRACT (DAY FROM date_cal) >= 15)
 OR (EXTRACT (MONTH FROM date_cal) = 6 AND EXTRACT (DAY FROM date_cal) <= 21)
 ) -- added bracket
AND EXTRACT (YEAR FROM date_cal) BETWEEN 2010 AND 2012

Nếu không có dấu ngoặc, bạn nhận được A or B or (C and D) , nhưng bạn muốn (A or B or C) and D




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lỗi lệnh sử dụng alembic không thể tìm thấy mã định danh

  2. Truy vấn SQL không mong muốn đến cơ sở dữ liệu Postgres trên Rails / Heroku

  3. Phân tích cú pháp Json postgresql

  4. Lỗi mã hóa với sqlalchemy và postgresql

  5. LIMIT được nhóm trong PostgreSQL:hiển thị N hàng đầu tiên cho mỗi nhóm?