sql >> Databasteknik >  >> RDS >> Mysql

WHILE syntax-fel i MySQL

Det ser ut som om du försöker köra denna procedurkod som ett anonymt block. Även om detta fungerar i vissa databaser (som Oracle) kan det inte göras i MySQL.

Om du vill köra detta, lägg det i en lagrad procedur och anropa sedan proceduren. Därför:

Skapa procedur

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

Samtalsprocedur

CALL `foo_update_routine`;

PS Du kanske vill undersöka HAVING-klausulen för dina utvalda uttalanden...




  1. Optimeringströsklar – gruppering och aggregering av data, del 3

  2. Oracle.DataAccess.Client beroenden

  3. Verifiera inloggning med Bcrypt-lösenord

  4. python-mysqldb utan transaktioner