sql - 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; 去
解决方案
也许你需要一个合并语句,像这样?
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);
推荐阅读
- javascript - 如何在 React 中处理复选框的 onChange?
- html - Vuejs | 创建使用其中一个道具的中间组件并将所有剩余的东西传播到
- css - 为什么 safari 上的轮播转换有问题?
- c# - Specflow TestExecution.json 输出不包括并行运行时运行的所有测试
- arrays - 如何根据条件将数组分成两个数组?
- typescript - 如何根据其 value 属性制作 TypeScript 类型键
- selenium - 如何使用 Selenium 查找类名?
- html - 在带有 HTML 的 ASP 中使用 INNER JOIN
- html - 如何用 CSS 和 HTML 设计这个内联横幅?
- javascript - 文件上传器不显示图片