1

次のMySqlスクリプトがあります:

SET @skip = 0;
SET @max = (SELECT COUNT(*) FROM table1);

CREATE TEMPORARY TABLE TempTable(
   id INT NOT NULL,
   name VARCHAR(32) NOT NULL
);

loop1: LOOP
  INSERT INTO TempTable (id, name) SELECT id, name FROM table1 LIMIT @skip, 1;

  IF @skip < @max THEN
    SET @skip = @skip + 1;
    ITERATE loop1;
  END IF;
  LEAVE loop1;
END LOOP loop1;

SELECT * FROM TempTable;

このスクリプトは機能していませんが、 内のすべての ID と名前を選択する必要がありますtable1。これらのループで他のことも行うため、ループを使用していますが、それは後で行います。私は解決策を探していませんSELECT id, name FROM table1が、エラーを修正したいと思います。だから私は私のループを続けることができます。

私が得るエラーは次のとおりです。

1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の「loop1: LOOP INSERT INTO TempTable (id, name) SELECT id, name FROM table1」の近くで使用する正しい構文を確認してください。

4

3 に答える 3

6

ループの構文については、次のようにしてください。

DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
    /*your database query logic*/
END

「SET @count=(@count+1)」を使用して、ループ内でカウンターをインクリメントします

于 2012-09-27T18:40:29.347 に答える
2

コードに構文エラーがあります (これLIMIT @skip動的 SQL であり、機能させるにはいくつかのトリックが必要です) が、 ではありませんloop1: LOOP

私の推測では、ストアド プロシージャのような複合ステートメント ( BEGIN... END) の外で LOOP を使用しようとしていますが、これは不可能です。これを行うには、ストアド プロシージャを作成する必要があります。

于 2012-09-27T18:44:13.207 に答える