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

Gộp 2 cột thành 1 cột trong MySQL với COALESCE()

Hàm COALESCE() trả về giá trị đầu tiên KHÔNG NULL trong danh sách. Dùng để gộp 2 cột: nếu cột 1 có giá trị thì lấy cột 1, ngược lại lấy cột 2.

Cú pháp

SELECT COALESCE(cột1, cột2) AS cột_gộp FROM tên_bảng;

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE combineTwoColumnsDemo (
    -> UserId INT,
    -> UserName VARCHAR(20),
    -> UserAge INT
    -> );
Query OK, 0 rows affected (1.12 sec)

Chèn dữ liệu (có NULL):

mysql> INSERT INTO combineTwoColumnsDemo VALUES
    -> (101, 'John', 23), (102, 'Carol', 20), (103, 'Bob', 25), (104, 'Mike', 26),
    -> (105, NULL, 23), (105, 'Maxwell', NULL);

Xem dữ liệu gốc:

mysql> SELECT * FROM combineTwoColumnsDemo;
+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 101    | John     | 23      |
| 102    | Carol    | 20      |
| 103    | Bob      | 25      |
| 104    | Mike     | 26      |
| 105    | NULL     | 23      |
| 105    | Maxwell  | NULL    |
+--------+----------+---------+

Gộp UserName và UserAge (ưu tiên UserName):

mysql> SELECT UserName, UserAge, 
    -> COALESCE(UserName, UserAge) AS Combine_UserName_UserAge 
    -> FROM combineTwoColumnsDemo;
+----------+---------+--------------------------+
| UserName | UserAge | Combine_UserName_UserAge |
+----------+---------+--------------------------+
| John     | 23      | John                     |
| Carol    | 20      | Carol                    |
| Bob      | 25      | Bob                      |
| Mike     | 26      | Mike                     |
| NULL     | 23      | 23                       |
| Maxwell  | NULL    | Maxwell                  |

Các trường hợp sử dụng COALESCE

Mục đíchVí dụ
Giá trị mặc định cho NULLCOALESCE(phone, email, 'Chưa cung cấp')
Gộp cột ưu tiênCOALESCE(nickname, fullname, username)
Thay thế NULL trong tính toánprice * COALESCE(discount, 0)
Chọn cột không NULL đầu tiênCOALESCE(col_a, col_b, col_c)

COALESCE vs IFNULL vs CASE

  • COALESCE(a,b,c...): Chuẩn SQL, nhiều đối số, trả về đầu tiên NOT NULL
  • IFNULL(a,b): Chỉ 2 đối số, MySQL proprietary
  • CASE WHEN a IS NOT NULL THEN a ELSE b END: Linh hoạt nhất

Lưu ý: COALESCE chuyển đổi kiểu dữ liệu về kiểu chung (thường là VARCHAR nếu có chuỗi). Kết quả cột gộp sẽ là kiểu chuỗi.