sql >> Databáze >  >> RDS >> Mysql

WHILE syntaktická chyba v MySQL

Vypadá to, že se pokoušíte spustit tento procedurální kód jako anonymní blok. I když to funguje v některých databázích (jako Oracle), nelze to provést v MySQL.

Pokud to chcete spustit, vložte to do uložené procedury a potom zavolejte proceduru. Proto:

Vytvořit postup

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

Postup volání

CALL `foo_update_routine`;

PS Možná budete chtít prozkoumat klauzuli HAVING pro vaše vybrané výroky...




  1. Chyby implementace JPA eclipse dvou cizích klíčů @IdClass

  2. Převést datum na milisekundy v MySQL

  3. SQLite LIKE

  4. MySQL NET Connect 6.7.2 ve Visual Studiu 2012