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

Lấy giá trị duy nhất từ hai cột trong MySQL với UNION


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;