仅插入一个列值的插入

时间:2013-01-24 02:18:54

标签: mysql

我想做这样的事情

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

修改

我在存储过程中使用它。

2 个答案:

答案 0 :(得分: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 JOINLIMIT来复制您的行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

答案 1 :(得分: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;

我希望这可能有所帮助。