我想做这样的事情
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
修改
我在存储过程中使用它。
答案 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 JOIN
和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
答案 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;
我希望这可能有所帮助。