Mysql
 sql >> Database >  >> RDS >> Mysql

WHILE errore di sintassi in MySQL

Sembra che tu stia tentando di eseguire questo codice procedurale come blocco anonimo. Sebbene funzioni in alcuni database (come Oracle), non può essere eseguito in MySQL.

Se si desidera eseguirlo, inserirlo in una stored procedure e quindi chiamare la procedura. Quindi:

Crea procedura

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

Procedura di chiamata

CALL `foo_update_routine`;

PS Potresti voler esaminare la clausola HAVING per le tue dichiarazioni selezionate...