sql >> Database >  >> RDS >> Mysql

WHILE syntaxisfout in MySQL

Het lijkt erop dat u deze procedurele code probeert uit te voeren als een anoniem blok. Hoewel dit in sommige databases (zoals Oracle) werkt, kan het niet in MySQL.

Als u dit wilt uitvoeren, plaatst u het in een opgeslagen procedure en roept u de procedure op. Vandaar:

Creëer procedure

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

Belprocedure

CALL `foo_update_routine`;

PS Misschien wil je de HAVING-clausule onderzoeken voor uw geselecteerde verklaringen...




  1. Geen geldige maand bij het uitvoeren van een IN-parameterprocedure met datumwaarde

  2. Hoe AUTO_INCREMENT opnieuw in te stellen in MySQL

  3. Voorbeeld van autonome transactie van Oracle

  4. MySQL:join met meerdere kolommen over meerdere tabellen?