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

Postgres Left Tham gia với điều kiện ở đâu

trái tham gia hai bảng với điều kiện where

Nó thường sai để sử dụng LEFT [OUTER] JOIN và sau đó lọc bằng WHERE điều kiện, do đó làm vô hiệu tính năng đặc biệt của LEFT JOIN để bao gồm tất cả các hàng từ bảng bên trái vô điều kiện . Giải thích chi tiết:

  • Giải thích chi tiết hơn về đề xuất hiệu suất điều kiện JOIN so với LEFT JOIN và WHERE

Đặt các điều kiện phải lọc tất cả các hàng vào WHERE mệnh đề (rid = 2 ), nhưng tạo điều kiện cho các hàng nối bên trái từ record_table điều kiện tham gia thực tế:

SELECT t.start_date, t.end_date  -- adding those
     , r.id, r.name, r.date 
FROM   time_table t
LEFT   JOIN record_table r ON r.date >= t.start_date
                          AND r.date <  t.end_date
WHERE  t.rid = 2;

Như đã nhận xét, thật hợp lý khi bao gồm các cột từ time_table trong kết quả, nhưng đó là phần bổ sung tùy chọn của tôi.

Bạn cũng cần phải hiểu rõ về giới hạn dưới và giới hạn trên . Quy ước chung là bao gồm thấp hơn và loại trừ giới hạn trên về thời gian (timestamp ) các dãy. Do đó, việc sử dụng >= của tôi và < ở trên.

Có liên quan:

  • Truy vấn SQL trên một chuỗi thời gian để tính giá trị trung bình
  • Chọn mức trung bình của các bản ghi được nhóm theo khoảng thời gian 5 phút

Hiệu suất sẽ không có vấn đề gì với các chỉ mục phù hợp. Bạn cần một chỉ mục (hoặc PK) trên time_table(rid) và một cái khác trên record_table(date) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kiểm tra xem mảng PostgreSQL có chứa giá trị hay không

  2. Trong Rails, Không thể tạo cơ sở dữ liệu cho {adapter => postgresql,

  3. EDB trở thành người dẫn đầu trong thị trường Postgres như thế nào

  4. Làm cách nào để làm việc với các số thập phân có độ chính xác cao trong PHP

  5. Làm cách nào để dừng / hủy một truy vấn trong postgresql?