2008-08-13 40 views
8

Giả sử chúng ta có một bảng A:ngoài hai chiều tham gia

itemid mark 
1  5 
2  3 

và bảng B:

itemid mark 
1  3 
3  5 

Tôi muốn tham gia A * B trên A.itemid = B.itemid cả hai bên phải và trái cách. tức là kết quả:

itemid A.mark B.mark 
1  5  3 
2  3  NULL 
3  NULL 5 

Có cách nào để thực hiện điều đó trong một truy vấn trong MySQL không?

Trả lời

6

Nó được gọi là bên ngoài đầy đủ tham gia và nó không được hỗ trợ tự nhiên trong MySQL, đánh giá từ docs của nó. Bạn có thể làm việc xung quanh giới hạn này bằng cách sử dụng UNION như được mô tả trong các ý kiến ​​cho trang tôi liên kết đến.

[sửa] Vì những người khác đã đăng đoạn trích, thông tin cho bạn đây. Bạn có thể xem giải thích trên trang được liên kết.

SELECT * 
FROM A LEFT JOIN B ON A.id = B.id 
UNION ALL 
SELECT * 
FROM A RIGHT JOIN B ON A.id = B.id 
WHERE A.id IS NULL 
2

có thể làm với một số công việc nhưng đây là một số sql

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark" 
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid; 

này dựa trên trái tham gia, trong đó trả về tất cả các hàng trong bảng gốc (trong trường hợp này đây là subselect bảng T). Nếu không có kết quả phù hợp trong bảng đã nối, thì nó sẽ đặt cột thành NULL.

-1

này làm việc cho tôi trên SQL Server:

select isnull(a.id, b.id), a.mark, b.mark 
from a 
full outer join b on b.id = a.id 
+0

Câu hỏi nêu rõ MySQL – cdeszaq

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