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

Mysql - cập nhật cột bảng từ một cột khác dựa trên thứ tự

Giả sử rằng id là duy nhất cho mỗi hàng, bạn có thể thực hiện việc này với các biến:

update <table> t join
       (select t.id, @rn := @rn + 1 as seqnum
        from <table> t cross join (select @rn := 0) vars
        order by old_position
       ) tt
       on tt.id = t.id
    set t.position = tt.seqnum;

Nếu bạn muốn, bạn có thể viết điều này mà không cần truy vấn con. Thách thức là xác định biến. Đây là một phương pháp:

update <table> t
    set t.position = (@rn := coalesce(@rn, 0) + 1)
    order by old_position;

Bạn không thể khởi tạo biến trong một truy vấn con vì MySQL không cho phép cả hai joinorder by trong một bản cập nhật update tuyên bố.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Trigger chỉ sau khi cập nhật nếu hàng đã thay đổi

  2. Xampp:trình duyệt web sẽ không hiển thị trang localhost

  3. PDO ::fetchAll so với PDO ::tìm nạp trong một vòng lặp

  4. Trường TEXT tương thích trong mysql và hsqldb

  5. Làm thế nào để đặt đối chiếu với mysqli?