Mysql
 sql >> база данни >  >> RDS >> Mysql

WHILE синтактична грешка в MySQL

Изглежда, че се опитвате да стартирате този процедурен код като анонимен блок. Въпреки че това работи в някои бази данни (като Oracle), не може да се направи в MySQL.

Ако искате да стартирате това, поставете го в съхранена процедура и след това извикайте процедурата. Следователно:

Процедура за създаване

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

Процедура за обаждане

CALL `foo_update_routine`;

PS Може да искате да проучите клаузата HAVING за вашите избрани изявления...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да постигнете дял по вид функционалност, използвайки променливи в MySQL 5.7

  2. как да получите резултат въз основа на 10 минути интервал в mysql

  3. docker-compose:повторно инициализиране на MySQL db всеки път

  4. Php 5.3 магически цитати gpc

  5. Незаконен микс от съпоставяния Грешка в MySQL