首页 > 解决方案 > SQL条件数据将表B复制到现有表A中的新列

问题描述

我正在努力将 SQL 中的数据传输到新列(这并不困难,因为我对 SQL XD 非常缺乏经验)。我将尝试描述问题:

我需要使用 UPDATE 语句从现有tableB.potatoes传输一些数据到在现有tableA中
新创建的列potato_new ( tableB.potatoes -> tableA.potatoes_new

条件:
-tableB 具有引用 tableA.ID 的外键 tableB.tableA_ID
-tableB.potatoes 和 tableB.tableA_ID 不是唯一的,但在具有相同 tableA_ID 的寄存器中,土豆也是相同的:
例子:
表B 表A
ID 表 A_ID 土豆 ID 土豆_新(当前)土豆_新(期望)
1 1 105 1 空 105
2 1 105 2 空 51
3 2 51 3 空 33
4 3 33
5 3 33
6 3 33


不需要从tableB.columnA中删除数据,只需复制到RIGHT寄存器:
-> 其中 tableA.ID = tableB.tableA_ID

我搜索了一段时间,但没有找到我想要的(或者至少我不明白这些解决方案如何解决我的问题......)

PS:这是我的第一篇文章...对不起格式,我尝试了一段时间没有更好地管理。如果您有一些提示或链接...我将不胜感激

编辑:解决方案(在 GabrielVal 帮助我回答之后)

我必须对 GabrielVal 回答做的更改:
1. 我不得不将 tableB 替换为 a,因为 MERGE 语句在查找 tableB 中的几条记录时遇到问题,其中 tableB.tableA_ID = tableA.ID
2. 因此我删除了 INSERT INTO WHEN NOT MATCHED 因为我不想在 tableA 上创建新记录,而只是填充当前记录
将 dbo.tableA 合并为 [目标]
使用 (SELECT DISTINCT tableA_ID,potatoes_new FROM tableB WHERE Measurement_ID != 0 ) 作为 [来源]
ON [源].tableA_ID = [目标].ID
匹配时
更新集 [目标].SystemID = [源].System_ID;
去

标签: sqlforeign-keysconditional-statementsupdate-statement

解决方案


也许你需要一个合并语句,像这样?

MERGE dbo.tableA as TARGET
USING  dbo.tableB as SOURCE
ON  SOURCE.tableA_id = Target.id 
WHEN MATCHED THEN
UPDATE SET  target.id = source.tableA_id,
target.potatoes_new = source.potatoes, 
WHEN NOT MATCHED BY TARGET THEN
INSERT ( ID, tableA_id, potatoes )
VALUES (Source.ID, Source.potatoes_new);

推荐阅读