我在表格中有一行数据:
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。
答案 0 :(得分:3)
您可以使用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 table
和INTO table
,所以您将同时为每个外键复制table
的所有记录