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

Hoán đổi giá trị 'a' và 'b' trong cột MySQL chỉ chứa 2 giá trị này


Giới thiệu

Khi cần hoán đổi (swap) hai giá trị 'a' ↔ 'b' trong một cột chỉ chứa 2 giá trị này, cách an toàn và đơn giản nhất là dùng câu lệnh CASE trong UPDATE.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    Value CHAR(1)
);
mysql> INSERT INTO DemoTable VALUES 
('a'), ('b'), ('a'), ('a'), ('b'), ('a'), ('b');

Xem dữ liệu trước

mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| a     |
| b     |
| a     |
| a     |
| b     |
| a     |
| b     |
+-------+

Câu lệnh UPDATE với CASE

mysql> UPDATE DemoTable 
SET Value = CASE 
    WHEN Value = 'a' THEN 'b' 
    ELSE 'a' 
END;

Kết quả sau hoán đổi

mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| b     |
| a     |
| b     |
| b     |
| a     |
| b     |
| a     |
+-------+

Tại sao dùng CASE thay vì 2 UPDATE riêng?

Nếu chạy 2 câu UPDATE lần lượt:

UPDATE DemoTable SET Value = 'b' WHERE Value = 'a'; -- Tất cả thành 'b'
UPDATE DemoTable SET Value = 'a' WHERE Value = 'b'; -- Tất cả thành 'a' (sai!)

Cách này sai vì câu thứ 2 sẽ cập nhật cả các dòng vừa đổi ở câu 1. CASE xử lý đồng thời trong một pass duy nhất.

Mở rộng: Nhiều giá trị hơn

UPDATE DemoTable 
SET Value = CASE Value
    WHEN 'a' THEN 'b'
    WHEN 'b' THEN 'c'
    WHEN 'c' THEN 'a'
    ELSE Value
END;

Xoay vòng 3 giá trị a→b→c→a.