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

所以只有第二列的值在变化,其他的都是一样的。

有没有更好或更紧凑的方法来完成上述操作?可能是一个查询!

我正在使用 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确保只返回一行并且您的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 回答