2012-08-11 28 views
5

Tôi đang tham gia 2 bảng -tbl1 và tbl2. Phép nối trái cung cấp tất cả dữ liệu từ tbl1 có trong tbl2 hoặc chỉ trên tbl1. Right join cho dữ liệu từ tbl2 không tồn tại trong tbl1.Kết hợp Trái và Phải Tham gia vào truy vấn mysql

Tôi muốn kết hợp cả hai kết quả.

Cách tốt nhất để làm điều này để tôi nhận được tất cả dữ liệu từ tbl1 và tbl2 là gì?

Trả lời

10

duy nhất bạn có thể làm điều đó là bằng cách sử dụng UNION. MySQL không hỗ trợ FULL JOIN giống như trong MSSQL.

SELECT * 
FROM tbl1 t1 
     LEFT JOIN tbl2 t2 
      ON t1.col = t2.col 
UNION 
SELECT * 
FROM tbl1 t1 
     RIGHT JOIN tbl2 t2 
      ON t1.col>= t2.<col 

SEE HERE: Simulating FULL JOIN in MYSQL

Bằng cách này, UNION có tùy chọn từ khóa ALL, khi ALL được bỏ qua, UNION tự động chọn DISTINCT hàng từ resultset.

examle:

SELECT * 
FROM tableA 
UNION ALL 
SELECT * 
FROM tableA 

này có thể dẫn đến bản sao hàng

ColA ColB 
================== 
1  John 
2  Jade 
2  Jade 
3  Hello 

NHƯNG nếu bạn bỏ qua lời ALL

SELECT * 
FROM tableA 
UNION 
SELECT * 
FROM tableA 

này có thể dẫn đến hàng riêng biệt chỉ

ColA ColB 
================== 
1  John 
2  Jade 
3  Hello 
4

gì bạn muốn là FULL JOIN

LEFT JOIN + RIGHT JOIN = FULL JOIN

Vì vậy, cố gắng này:

SELECT * FROM tbl1 
LEFT JOIN tbl2 ON tbl1.id = tbl2.id 
UNION 
SELECT * FROM tbl1 
RIGHT JOIN tbl2 ON tbl1.id = tbl2.id 

Mệnh UNION kết hợp các kết quả của hai truy vấn SQL vào một đơn bảng của tất cả các hàng phù hợp.

1

bạn phải sử dụng OUTER FULL JOIN, Nhưng mysql doesnt hỗ trợ nó .. Bạn có thể làm điều này để có được kết quả:

SELECT * 
FROM tbl1 t1 LEFT JOIN tbl2 t2 
ON t1.<col> = t2.<col> 
UNION 
SELECT * 
FROM tbl1 t1 RIGHT JOIN tbl2 t2 
ON t1.<col>= t2.<col> 
2

Dưới đây là một sự thay thế có thể dễ dàng mở rộng nếu bạn có đầy đủ tham gia của hơn 2 bảng:

SELECT t1*, t2.* 
FROM 
    (SELECT col 
     FROM tbl1 
    UNION 
     SELECT col 
     FROM tbl2 
    ) AS d 
    LEFT JOIN tbl1 AS t1 
    ON t1.col = d.col 
    LEFT JOIN tbl2 AS t2 
    ON t2.col = d.col ; 
Các vấn đề liên quan