Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menukar nilai kolom di MySQL

Saya hanya harus menghadapi hal yang sama dan saya akan merangkum temuan saya.

  1. Tabel UPDATE table SET X=Y, Y=X pendekatan jelas tidak berfungsi, karena hanya akan menyetel kedua nilai ke Y.

  2. Berikut adalah metode yang menggunakan variabel sementara. Terima kasih kepada Antony dari komentar http://beerpla .net/2009/02/17/swapping-column-values-in-mysql/ untuk tweak "IS NOT NULL". Tanpa itu, kueri bekerja secara tidak terduga. Lihat skema tabel di akhir posting. Metode ini tidak menukar nilai jika salah satunya adalah NULL. Gunakan metode #3 yang tidak memiliki batasan ini.

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

  3. Metode ini ditawarkan oleh Dipin, sekali lagi, di komentar http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/ . Saya pikir itu solusi yang paling elegan dan bersih. Ia bekerja dengan nilai NULL dan non-NULL.

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

  4. Pendekatan lain yang saya lakukan tampaknya berhasil:

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

Pada dasarnya, tabel pertama adalah tabel yang diperbarui dan tabel kedua digunakan untuk menarik data lama.
Perhatikan bahwa pendekatan ini memerlukan kunci utama.

Ini adalah skema pengujian saya:

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. Cara membuat dan menghapus database dan tabel di MySQL

  2. SQL Server setara dengan fungsi substring_index di MySQL

  3. MySQL INT artinya

  4. NULL di MySQL (Kinerja &Penyimpanan)

  5. Menutup Koneksi JDBC di Pool