Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm DIFFERENCE (phần tử khác biệt) giữa hai bảng với JOIN

Kỹ thuật: UNION của hai Exclusion Join

Để lấy các hàng chỉ tồn tại ở một trong hai bảng (không giao nhau):

SELECT * FROM table1 LEFT JOIN table2 USING(cols) WHERE table2.col IS NULL
UNION
SELECT * FROM table2 LEFT JOIN table1 USING(cols) WHERE table1.col IS NULL;

Ví dụ

Hai bảng value1, value2:

mysql> SELECT * FROM value1;
+-----+-----+
| i   | j   |
+-----+-----+
| 1   | 1   |
| 2   | 2   |
+-----+-----+

mysql> SELECT * FROM value2;
+------+------+
| i    | j    |
+------+------+
| 1    | 1    |
| 3    | 3    |
+------+------+

Tìm DIFFERENCE:

mysql> SELECT * FROM value1 LEFT JOIN value2 USING(i,j) WHERE value2.i IS NULL
    UNION
    SELECT * FROM value2 LEFT JOIN value1 USING(i,j) WHERE value1.i IS NULL;
+------+-----+
| i    | j   |
+------+-----+
| 2    | 2   |
| 3    | 3   |
+------+-----+

Kết quả: (2,2) chỉ có ở value1, (3,3) chỉ có ở value2.