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

Hoán đổi dữ liệu giữa hai cột trong MySQL

Để hoán đổi dữ liệu giữa hai cột trong MySQL, sử dụng kỹ thuật biến tạm.

Tạo bảng demo

mysql> create table DemoTable (
    -> Name1 varchar(100),
    -> Name2 varchar(100)
    -> );
Query OK, 0 rows affected (0.58 sec)

Chèn dữ liệu

mysql> insert into DemoTable values('John Smith', 'Chris Brown');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David Miller', 'Jone Doe');
Query OK, 1 row affected (0.16 sec)

Hiển thị dữ liệu gốc

mysql> select * from DemoTable;

Kết quả

+--------------+-------------+
| Name1        | Name2       |
+--------------+-------------+
| John Smith   | Chris Brown |
| David Miller | Jone Doe    |
+--------------+-------------+
2 rows in set (0.00 sec)

Truy vấn hoán đổi Name1 và Name2

mysql> update DemoTable
    -> SET Name1 = (@tmpName := Name1), Name1 = Name2, Name2 = @tmpName;
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2 Changed: 2 Warnings: 0

Kiểm tra kết quả - Đã hoán đổi thành công

mysql> select * from DemoTable;

Kết quả

+-------------+--------------+
| Name1       | Name2        |
+-------------+--------------+
| Chris Brown | John Smith   |
| Jone Doe    | David Miller |
+-------------+--------------+
2 rows in set (0.00 sec)

Giải thích kỹ thuật:

  • @tmpName := Name1: Gán giá trị Name1 vào biến session @tmpName.
  • Name1 = Name2: Gán Name2 vào Name1.
  • Name2 = @tmpName: Gán giá trị cũ của Name1 (đã lưu trong @tmpName) vào Name2.
  • MySQL đánh giá các biểu thức theo thứ tự từ trái sang phải trong cùng một SET.

Cách khác (an toàn hơn, chuẩn SQL):

UPDATE DemoTable SET Name1 = Name2, Name2 = Name1 WHERE 1=1; -- SAI: cả hai cùng tham chiếu giá trị mới

Cần dùng subquery hoặc biến tạm như trên.