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

Tukar nilai kolom dengan kolom yang sama dari catatan lain

Operasi "tukar" tunggal...

SWAP(@old_pos, @new_pos)

UPDATE
  my_table
SET
  position = CASE WHEN position = @old_pos THEN @new_pos ELSE @old_pos END
WHERE
  position IN (@old_pos, @new_pos)


Ini tidak mudah diperluas ke tabel operasi swap. Ini karena ia akan mencoba melakukan semua swap sekaligus, padahal sebenarnya swap harus terjadi dalam urutan tertentu...


Juga, jika Anda ingin melakukan SWAP(@id, @new_pos) Anda perlu melakukan sub-query atau bergabung sendiri pada tabel yang Anda perbarui. MySQL tidak menyukainya, dan meskipun ada beberapa cara untuk mengatasi keterbatasan, hal itu membuat segalanya menjadi sedikit berantakan...

UPDATE
  my_table
INNER JOIN
  (SELECT position AS old_pos, @new_pos AS new_pos FROM (SELECT position FROM my_table WHERE id = @id)) AS params
    ON my_table.position IN (params.old_pos, params.new_pos)
SET
  myTable.position = CASE WHEN position = old_pos THEN new_pos ELSE old_pos END

(Saya berpikir itu akan berhasil)


CATATAN:

Keduanya berasumsi bahwa KEDUA @old_pos dan @new_pos, atau @id dan @new_pos ditemukan, tidak diperiksa, dan akan membuat berantakan jika mereka tidak ada.

Ini dapat diselesaikan dengan memasukkannya ke dalam transaksi, dan memutar kembali jika ROW_COUNT() menunjukkan bahwa hanya 1 catatan yang diperbarui.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. generator mybatis Pola nama kolom tidak boleh NULL atau kosong

  2. Cara mendekati dilema:pesanan ekspor dari sistem magento lama impor ke magento baru, ID yang tumpang tindih

  3. pilih dua baris terbaru untuk setiap pengguna untuk mendapatkan perbedaan kolom (MySQL)

  4. Bagaimana cara mengekspor database mysql menggunakan Command Prompt?

  5. Cara membuat dan memelihara Database MySQL di cPanel