sql - 将两个表中的相关行复制到 SQL 中具有新值的相同表中?
问题描述
我有两个表,“table1”和“table2”。它们包含彼此相关的行。表“table2”有成对的行和名为“table1_id”的列,这些对引用“table1”中的连续“id”列。
需要执行的任务是我需要从两个表中复制行并将这些行放入具有新数据的同一个表中,同时保持它们之间的关系。
我已经阅读了 StackOverflow 上的几篇文章和“mssqltips.com”上的一些文章,但我仍然不确定我应该如何做到这一点。我应该使用带有连接和临时表的游标还是查询?完成上述任务的最佳实践方法是什么,如果可能的话,你能展示一个简短的例子吗?
解决方案
如果id
列正在被复制并且确实是一个 ID(唯一键),则不能逐字“复制两个表中的两行并将它们放入同一个表中”。如果您想将其他一些(非键)列复制到具有新 ID 的新行中,那很好。如果这是您想要的,您可以先创建主键 (table1) 行,然后引用新创建的键。如何执行此操作取决于该id
列是生成的键还是显式指定的键,以及您是否还有任何键(主键或外键)table2
。
它可能看起来像这样:
insert into table1
select col1, col2, etc
from table1
where id = 'somekey'
insert into table2
select 'newkey' as table1_id, col3, col4, etc
from table2
where table1_id = 'somekey'
如果您想以原子方式执行此操作,请将其包装在 abegin transaction
中,并使用OUTPUT
子句或类似内容来收集新 ID;请参阅有关此的文档。
推荐阅读
- loopbackjs - 在 loopback4 中使用 hasMany 关系和级联 ORM 级别
- python - 使用 shift() 和 groupby() 使用每组移动时间序列数据会导致 NaN
- apache-flink - 为什么 flink 中的有状态源需要同步锁
- laravel - Laravel 5.8 @csrf 和 @method 不起作用
- rust - 将不可变结构传递给多个闭包
- abap - 如何找出周期性后台作业的 JOBCOUNT 值?
- python-3.x - 我如何在 Python 中为 C 中的这个 For 循环获取等效条件
- apache-camel - PollingConsumer 使用 smb 协议和 pollEnrich()
- python - 当我将代码从伪代码转换为 Python 程序时,为什么会出现重复和“直到”错误?
- excel - 当工作簿打开 [Mac] 时,我可以防止单元格被弄脏吗?