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...