Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trao đổi giá trị cột trong MySQL

Tôi vừa phải giải quyết vấn đề tương tự và tôi sẽ tóm tắt những phát hiện của mình.

  1. Bảng UPDATE table SET X=Y, Y=X cách tiếp cận rõ ràng là không hoạt động, vì nó sẽ chỉ đặt cả hai giá trị thành Y.

  2. Đây là một phương pháp sử dụng một biến tạm thời. Cảm ơn Antony từ nhận xét của http:// beerpla .net / 2009/02/17 / swapping-column-values-in-mysql / cho chỉnh sửa "KHÔNG ĐỦ". Không có nó, truy vấn hoạt động không thể đoán trước được. Xem lược đồ bảng ở cuối bài. Phương thức này không hoán đổi các giá trị nếu một trong số chúng là NULL. Sử dụng phương pháp số 3 không có giới hạn này.

    UPDATE swap_test SET x=y, [email protected] WHERE (@temp:=x) IS NOT NULL;

  3. Phương pháp này được đưa ra bởi Dipin, nhưng một lần nữa, các nhận xét của http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/ . Tôi nghĩ đó là giải pháp thanh lịch và sạch sẽ nhất. Nó hoạt động với cả giá trị NULL và không phải NULL.

    UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;

  4. Một cách tiếp cận khác mà tôi nghĩ ra có vẻ hiệu quả:

    UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;

Về cơ bản, bảng thứ nhất là bảng được cập nhật và bảng thứ hai được sử dụng để lấy dữ liệu cũ từ đó.
Lưu ý rằng phương pháp này yêu cầu phải có khóa chính.

Đây là giản đồ thử nghiệm của tôi:

CREATE TABLE `swap_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `x` varchar(255) DEFAULT NULL,
  `y` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `swap_test` VALUES ('1', 'a', '10');
INSERT INTO `swap_test` VALUES ('2', NULL, '20');
INSERT INTO `swap_test` VALUES ('3', 'c', NULL);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi tem DateTime của MySql thành định dạng Ngày của JavaScript

  2. Cách cấp quyền truy cập từ xa vào một cơ sở dữ liệu MySQL duy nhất

  3. Xác định Xếp hạng dựa trên Nhiều Cột trong MySQL

  4. NodeJS MySQL Dump

  5. Thay đổi mật khẩu gốc MySQL