2010-08-10 5 views
5

Theo tìm kiếm của Google: vì MySQL không hỗ trợ tham gia bên ngoài đầy đủ, nó có thể được mô phỏng thông qua công đoàn và/hoặc tất cả. Nhưng cả hai loại bỏ các bản sao chính hãng hoặc hiển thị các bản sao giả mạo.Cách hiệu quả để mô phỏng kết nối bên ngoài đầy đủ trong MySQL?

Điều gì sẽ đúng và hiệu quả?

Điều này có nghĩa là question có liên quan nhưng không thể nhận được câu trả lời của nó.

+2

xem liên kết này: http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/ –

Trả lời

8

Bạn có thể sử dụng một LEFT JOIN và một RIGHT JOIN:

SELECT * FROM tableA LEFT JOIN tableB ON tableA.b_id = tableB.id 
UNION ALL 
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.b_id = tableB.id 
WHERE tableA.b_id IS NULL 

Ngoài ra còn có một số thông tin trên Wikipedia về chủ đề này: Full outer join.

Bài viết trên Wikipedia đề xuất sử dụng UNION trong MySQL. Điều này là hơi chậm hơn UNION ALL, nhưng quan trọng hơn nó sẽ không luôn luôn cho kết quả chính xác - nó sẽ loại bỏ các hàng trùng lặp từ đầu ra. Vì vậy, thích sử dụng UNION ALL thay vì UNION ở đây.

+1

Đây chính xác là giải pháp được đề cập bởi @ haim evgi (qua liên kết trang). Cảm ơn. – understack

+2

Làm thế nào để bạn mở rộng câu trả lời này cho các bảng N? Đó là, làm thế nào bạn sẽ mô phỏng một FULL OUTER JOIN trên bốn bảng và lên? – Gili