【问题标题】:SQL: Copy one row multiple times, changing one value each timeSQL:多次复制一行,每次改变一个值
【发布时间】:2012-10-23 04:03:26
【问题描述】:

我在一个表中有一行数据:

Key | Val1 | Val2
----+------+-----
1   | A    | B

我想复制这一行,但为每个新行分配一个列表中的不同键(实际上是外键):

New keys
--------
2
3
4

可以通过查询轻松获得此列表。复制后的表格应该是这样的:

Key | Val1 | Val2
----+------+-----
1   | A    | B
2   | A    | B
3   | A    | B
4   | A    | B

到目前为止,我想出的是这样的:

INSERT INTO table (Key, Val1, Val2) (
    SELECT '2' AS Key, Val1, Val2 FROM table WHERE Key='1'
);

这可行,但当然它一次只复制一行。有没有办法一次复制所有行?

如果它有所作为,我会使用 Oracle。

【问题讨论】:

  • 你能告诉我们另一个表(外键表)吗?
  • @astander:将“新键”表视为外键表(它实际上只是在 Excel 电子表格中发送给我的值列表。)

标签: sql insert-select


【解决方案1】:

您可以使用 SELECT .. FROM DUAL 来组成值,并且您可以使用 UNION ALL 将多行组合成一个结果。还有多种其他方法可以创建结果集,例如递归公用表表达式。

INSERT INTO table (Key, Val1, Val2)
SELECT d.newKey, t.Val1, t.Val2
FROM table t
cross join (select 2 NewKey from dual union all
            select 3 NewKey from dual union all
            select 4 NewKey from dual) d;

如果您的新键来自子查询,那就更容易了,例如

INSERT INTO table (Key, Val1, Val2)
SELECT d.FKey, t.Val1, t.Val2
FROM table t
cross join (select FKey
            from SomeOtherTable
            Where ......) d;

但是,请注意,由于您要复制 FROM tableINTO table,因此您将同时为每个外键复制来自 table 的所有记录。

【讨论】:

  • 太棒了,这完美!非常感谢。我不知道“交叉连接”。
猜你喜欢
  • 1970-01-01
  • 2016-01-15
  • 2023-04-02
  • 2015-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
  • 2014-03-03
  • 2020-12-07
相关资源
最近更新 更多