我有几个表,其中的记录与外键相关联。我想根据现有记录生成一些测试数据。是否有编写SQL来复制整个记录集的最佳实践?下面的示例用于从一个表中复制记录。如果我有多个其他表链接到GAME怎么办?我能用一句话来实现这一点吗?
SQL
INSERT INTO GAME (game_id, name, col_3)
SELECT seq_game_id.nextval, name, col_3
FROM GAME
WHERE NAME = 'Texas Holdem';
但是,需要复制整个记录集,包括跨多个表的相关数据。手动执行此任务将涉及复制“GAME”表和由“game_id”连接的所有其他相关表。这些操作需要跨多个表进行,在维护关系的同时添加新行。”
2条答案
按热度按时间uurv41yg1#
我想你的问题是
生成具有新ID的新行。那么,如果你想从子表中复制行,如何找到要复制的行以及如何找到新的关联ID呢?
我们需要一个引用来告诉我们哪个新行源于哪个旧行。
你可以用一个pumps表来做到这一点:
只要没有大孩子的table,这就很好用。
另一个选择是PL/SQL:
h4cxqtbf2#
是否有编写SQL来复制整个记录集的最佳实践?
如果要从一个表中获取所有数据,用途:
或显式命名列:
如果你也想
INSERT
数据,那么你可以使用你的查询:或者,如果存在现有数据,并且您希望跳过重复项:
WHEN MATCHED THEN UPDATE ...
子句。如果我有多个其他表链接到GAME怎么办?我能用一句话来实现这一点吗?
然后使用
JOIN
:如果你有更多的表,那么使用更多的
JOIN
,如果你想INSERT
的数据,那么只需要在SELECT
之前前置INSERT INTO
行。如果你想
MERGE
与多个表,然后把查询生成的所有列你想插入到USING
子句: