2013-07-04 42 views
17

Tôi không thể tìm thấy câu trả lời đơn giản. Truy vấn của tôi đang loại bỏ kết quả sai, và tôi nghĩ rằng đó là vì nó không nhìn thấy "AND" như một sự tham gia thực tế.Tham gia bảng postgres trên hai cột?

Bạn có thể làm điều gì đó như thế này và nếu không, cách tiếp cận chính xác là những gì:

SELECT * from X 
LEFT JOIN Y 
ON 
    y.date = x.date AND y.code = x.code 

?

+1

sự là gì mong đợi là kết quả thực tế? –

+2

Cú pháp là chính xác - nếu không bạn sẽ nhận được một thông báo lỗi. Mô tả của bạn "loại bỏ kết quả sai" không cho chúng tôi biết bất kỳ điều gì về vấn đề của bạn. Bạn phải cho chúng tôi thấy một số dữ liệu mẫu và đầu ra dự kiến. Lý tưởng nhất là tạo một ví dụ nhỏ trên http://sqlfiddle.com –

Trả lời

24

Điều này có thể:

Mệnh đề ON là loại chung nhất của điều kiện join: phải mất một biểu hiện giá trị Boolean cùng loại như được sử dụng trong một mệnh đề WHERE. Một cặp hàng từ T1 và T2 khớp nếu biểu thức BẬT được đánh giá là đúng đối với chúng.

http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-FROM

SQL của bạn có vẻ OK.

14

Không sao. Trong thực tế, bạn có thể đặt bất kỳ điều kiện trong mệnh đề ON, thậm chí một không liên quan đến các cột chính hay thậm chí là các bảng ở tất cả, ví dụ:

SELECT * from X 
LEFT JOIN Y 
    ON y.date = x.date 
    AND y.code = x.code 
    AND EXTRACT (dow from current_date) = 1 
Các vấn đề liên quan