Пока существует в MySQL - PullRequest
       11

Пока существует в MySQL

0 голосов
/ 04 сентября 2010

Как использовать цикл while в mysql?

while exists (select * from table1) 
Do
 //sql statements
end while

Код ошибки: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, который будет использоваться в ближайшее время ....

Вот что я хочу сделать:

  1. Вставка записей 20 КБв таблицу2 из таблицы1.
  2. Зацикливание таблицы1 и вставка в таблицу 3 первых 50 записей.Удаление 50 записей table1 с присоединением table3.
  3. Завершить цикл при удалении 20К записей из таблицы1.

Любая помощь / мысли?

1 Ответ

3 голосов
/ 04 сентября 2010

Вы можете попытаться убедиться, что после вашего END WHILE стоит точка с запятой или, альтернативно, попытаться поставить BEGIN и END; вокруг ваших утверждений.

Однако мы действительно должны изучить метод на основе множеств.

РЕДАКТИРОВАТЬ: Если, как и в ваших комментариях, вы решили сделать это в 50 рядов строк ... по любой причине ... Вы можете попробовать выбрать количество строк, а затем разделить его на размер пакетачтобы получить переменную подсчета числа.

Например, если у вас есть 20 000 строк, и вы вставляете их порциями по 50, то вы знаете, что вам потребуется 400 итераций.Затем вы можете использовать int и делать WHILE X < 400 Это будет быстрее, чем делать EXISTS запросы.

Непроверенный код (возможно, неверный синтаксис, но он должен дать вам идею)

INSERT INTO table2 (columns)
SELECT columns from table1

DECLARE @TopCount int DEFAULT 0;
DECLARE @CurrCount int DEFAULT 0;
SELECT @TopCount = COUNT(*) from table2

DO WHILE (@CurrCount < @TopCount)
 BEGIN    
  INSERT INTO table3 (columns)
  SELECT columns from table2 LIMIT 50
  DELETE table2 LIMIT 50
  SET @CurrCount = @CurrCount + 50
 END;
END WHILE;

Это довольно глупо, имхо, но я все еще не понимаю твою цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...