Mysql
 sql >> Baza danych >  >> RDS >> Mysql

WHILE błąd składni w MySQL

Wygląda na to, że próbujesz uruchomić ten kod proceduralny jako anonimowy blok. Chociaż działa to w niektórych bazach danych (takich jak Oracle), nie można tego zrobić w MySQL.

Jeśli chcesz to uruchomić, umieść go w procedurze składowanej, a następnie wywołaj procedurę. Stąd:

Utwórz 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 $$

Procedura połączenia

CALL `foo_update_routine`;

PS Możesz zbadać klauzula HAVING dla wybranych wyciągów...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz sumę kolumny MySQL w PHP

  2. Tworzenie menu wyboru w PHP z domyślnym wyborem z bazy danych MySQL

  3. Przełącz dużą witrynę z MySQL na MySQLi

  4. Wydajny sposób wstawiania ramki danych z R do SQL

  5. tabele pivot/unpivot mysql