Giới thiệu
Dùng UNION (mặc định DISTINCT) để gộp giá trị từ 2 cột (có thể 2 bảng khác nhau) thành một danh sách không trùng lặp.
Ví dụ minh họa
Tạo 2 bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable1 (Value1 INT); mysql> INSERT INTO DemoTable1 VALUES (1), (2), (3), (4);
mysql> CREATE TABLE DemoTable2 (Value2 INT); mysql> INSERT INTO DemoTable2 VALUES (3), (4), (5), (6);
Truy vấn UNION
mysql> SELECT Value1 FROM DemoTable1 UNION SELECT Value2 FROM DemoTable2;
Kết quả (1-6, không trùng)
+--------+ | Value1 | +--------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +--------+
UNION vs UNION ALL
UNION: Gộp + loại trùng (DISTINCT) + sắp xếp. Chậm hơn.UNION ALL: Gộp giữ nguyên trùng lặp + không sort. Nhanh hơn.
Cột phải tương thích kiểu dữ liệu
SELECT int_col FROM t1 UNION SELECT varchar_col FROM t2; -- OK, chuyển kiểu ngầm SELECT date_col FROM t1 UNION SELECT int_col FROM t2; -- Có thể lỗi hoặc kết quả kỳ lạ
Mở rộng: Thêm cột nguồn
SELECT Value1 AS val, 'table1' AS src FROM DemoTable1 UNION SELECT Value2, 'table2' FROM DemoTable2;