2012-03-31 34 views
8

Tôi đang cố gắng tìm ra truy vấn tham gia nhiều bảng (cca 8). Tại một thời điểm tôi cần tham gia một trong hai bảng. Vì vậy, cho phép gọi kết quả cho đến thời điểm này A. Bây giờ tôi muốn tham gia B, hoặc C. Khi tôi sử dụng B, tôi nhận được kết quả nhỏ hơn, hoặc không có kết quả. Nếu không có kết quả sau khi tham gia, tôi cần phải tham gia C thay vào đó.Nếu sau đó tham gia tham gia khác

Để tóm tắt, giao điểm của (A, C) cho kết quả lớn hơn và tôi chỉ muốn tham gia C nếu giao nhau của (A, B) trống.

Điều gì sẽ là một cách trơn tru để nói điều này trong mysql?

Trả lời

13

Chỉ tham gia nếu là người đầu tiên tham gia khóa chính là null:

SELECT * 
FROM A 
LEFT JOIN B ON A.id = B.id 
LEFT JOIN C ON B.id IS NULL AND A.id = C.id 
+3

Nếu bạn muốn kết quả của B hoặc C để xuất hiện trong các cột tương tự trong danh sách lựa chọn của bạn, bạn có thể sử dụng một cái gì đó như 'CHỌN liên hiệp (B.id, C.id) như id, coalesce (B.othercolumnname, C.othercolumnname) như othercolumnname, ... '. – Asaph

+0

Điểm tuyệt vời, cảm ơn Asaph – GavinCattell

+0

cảm ơn cả hai, đó chính xác là ý tưởng tôi đang tìm kiếm –

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