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

Cách thay thế hàng trong bảng MySQL có điều kiện bằng CASE

Để cập nhật giá trị cột dựa trên nhiều điều kiện khác nhau, MySQL cung cấp câu lệnh CASE trong mệnh đề UPDATE ... SET. Cách này gọn gàng hơn viết nhiều câu UPDATE riêng lẻ.

Cú pháp cơ bản

UPDATE ten_bang
SET ten_cot = CASE
    WHEN dieu_kien_1 THEN gia_tri_1
    WHEN dieu_kien_2 THEN gia_tri_2
    ...
    ELSE gia_tri_mac_dinh
END;

Ví dụ minh họa

Tạo bảng điểm người chơi:

mysql> CREATE TABLE DemoTable1481 (
    -> PlayerScore INT
    -> );
Query OK, 0 rows affected (0.42 sec)

Chèn dữ liệu mẫu:

mysql> INSERT INTO DemoTable1481 VALUES(454), (765), (890);

Dữ liệu ban đầu:

+-------------+
| PlayerScore |
+-------------+
|         454 |
|         765 |
|         890 |
+-------------+

Cập nhật từng giá trị cũ thành giá trị mới tương ứng:

mysql> UPDATE DemoTable1481
    -> SET PlayerScore = CASE
    ->     WHEN PlayerScore = 454 THEN 1256
    ->     WHEN PlayerScore = 765 THEN 1865
    ->     WHEN PlayerScore = 890 THEN 3990
    -> END;
Query OK, 3 rows affected (0.17 sec)

Kết quả sau cập nhật:

+-------------+
| PlayerScore |
+-------------+
|        1256 |
|        1865 |
|        3990 |
+-------------+

Lưu ý quan trọng

  • Nếu không có mệnh đề ELSE, các hàng không khớp điều kiện sẽ được đặt thành NULL (trừ khi cột có NOT NULL).
  • Có thể dùng biểu thức phức tạp trong nhánh THEN (ví dụ: PlayerScore * 1.1).
  • Hiệu năng: CASE được đánh giá lần lượt từng hàng, phù hợp cho bảng vừa và nhỏ. Với bảng lớn, hãy cân nhắc index trên cột điều kiện.