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

WHILE sintaks-kesalahan di MySQL

Sepertinya Anda mencoba menjalankan kode prosedural ini sebagai blok anonim. Meskipun ini berfungsi di beberapa database (seperti Oracle), ini tidak dapat dilakukan di MySQL.

Jika Anda ingin menjalankan ini, masukkan ke dalam prosedur tersimpan dan kemudian panggil prosedur. Oleh karena itu:

Buat prosedur

DELIMITER $$

CREATE PROCEDURE `foo_update_routine`()
BEGIN
  WHILE ((SELECT COUNT(*) FROM 
    (SELECT id, COUNT(*) AS cnt
      FROM foo
      GROUP BY id
      ORDER BY COUNT(*) DESC
    ) cnts
    WHERE cnt > 1) != 0) 
  DO
    SET @curr_id = (SELECT id FROM 
      (SELECT id, COUNT(*) AS cnt
         FROM foo
         GROUP BY id
         ORDER BY COUNT(*) DESC
      ) cnts
      WHERE cnt > 1
      LIMIT 1);

    SET @new_id = (SELECT MAX(id) + 1 FROM foo);

    UPDATE foo SET id = @new_id 
      WHERE id = @curr_id 
      LIMIT 1;

  END WHILE;
END $$

Prosedur Panggilan

CALL `foo_update_routine`;

PS Anda mungkin ingin menyelidiki klausa HAVING untuk pernyataan pilihan Anda...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mencoba menggunakan R dengan MySQL:Perintah yang digunakan tidak diizinkan dengan versi MySQL ini

  2. Server mengirim charset (255) tidak diketahui oleh klien, tetapi set karakter cocok

  3. Urutan acak dengan Entity Framework dan MySQL

  4. Mengurutkan hasil kueri mysql

  5. daftar semua tabel dalam database dengan MySQLi