0

こんなことしたい

Insert into abc(col1, col2, col3) select col1, 1, col3 from xyz where somecondition
Insert into abc(col1, col2, col3) select col1, 2, col3 from xyz where somecondition
Insert into abc(col1, col2, col3) select col1, 3, col3 from xyz where somecondition
Insert into abc(col1, col2, col3) select col1, 4, col3 from xyz where somecondition
...

したがって、変更されているのは2番目の列の値のみであり、他のすべては同じです。

上記を行うためのより良いまたはコンパクトな方法はありますか?1つのクエリで何かになる可能性があります!

私はMySqlを使用しています

編集:

これをストアドプロシージャ内で使用しています。

4

2 に答える 2

2

someconditionが同じで、連番が必要な場合は、col2次のように実行できます。

INSERT INTO abc(col1, col2, col3)
SELECT col1, @n := @n + 1, col3
FROM xyz, (SELECT @n:= 0) n
WHERE somecondition

アップデート

WHERE適用された条件xyzにより、1つの行のみが返され、xyzテーブルに9を超えるレコードがある場合(CROSS他のテーブルでも可能です)、CROSS JOINANDを利用して、次のような単一のステートメントLIMITで行をN回(例では9回)複製できます。INSERT-SELECTこれ:

INSERT INTO abc(col1, col2, col3)
SELECT t1.col1, @n := @n+1, t1.col3 
  FROM xyz AS t1 CROSS JOIN xyz AS t2,(SELECT @n:= 0) n 
WHERE t1.col2=2 LIMIT 9
于 2013-01-24T02:41:28.610 に答える
0

次のように、クエリにループするストアドプロシージャを作成できます。

CREATE PROCEDURE doiterate(p1 INT)
BEGIN
  label1: LOOP
    SET p1 = p1 + 1;
    IF p1 < 10 THEN
      ITERATE label1;
    END IF;
    LEAVE label1;
  END LOOP label1;
  SET @x = p1;
END;

これがお役に立てば幸いです。

于 2013-01-24T02:24:47.050 に答える