Я пытаюсь использовать цикл while в одноразовом запросе к базе данных MySQL (5.1.41-3ubuntu12.10-log
):
WHILE ((SELECT COUNT(*) FROM
(SELECT id, COUNT(*) AS cnt
FROM foo
GROUP BY id
ORDER BY COUNT(*) DESC) cnts
WHERE cnt > 1) != 0) DO
BEGIN
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;
Что это значит , когда есть несколько записей стот же идентификатор, обновите один из них следующим идентификатором.
Синтаксис в теле корректен, и предикат, используемый в операторе while, также выполняется без каких-либо проблем самостоятельно.MySQL возвращает синтаксическую ошибку в начале запроса:
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE ((SELECT count(*) FROM
(SELECT id, COUNT(*) AS cnt
FROM stock_produ' at line 1
Я понимаю, что это не может быть Правильный путь делать что-то, но это очень плохо (или скорее нет-в общем) продуманная база данных, поэтому было бы здорово, если бы я мог заставить ее работать таким образом.
Спасибо,
Робин