sql - 根据第一个更新重复数据
问题描述
谁能帮我解决我的问题,所以我想进行一个查询,我可以用它来更新双倍数据,例如:我有相同 B.OTO_ID 的数据,其中一个正确输入了 VLI_OMDF_ID 数据而使用另一个 NULL,我想对 sql 中的所有数据说,如果有两个数据具有相同的 B.OTO_ID 但 RACK 是另一个 NULL 代码,我将 UPDATE 它与第一个相同。
请看图片
所以我需要更新表 VL_Liegenschaften 列 VLI_OMDF_ID 如果 VL_Wohneinheiten 表中有两个 VLW_OTOID 其中一个是 VLI_OMDF_ID 为空
我希望你能理解我,非常感谢你的帮助
merge into VL_Liegenschaften
using(select VL_Wohneinheiten.VLW_Liegenschaft, t.VLI_OMDF_ID
from (
select VL_Liegenschaften.VLI_ID, VL_Liegenschaften.VLI_OMDF_ID, VL_Wohneinheiten.VLW_OTOID
from VL_Liegenschaften
join VL_Wohneinheiten on VL_Wohneinheiten.VLW_Liegenschaft = VL_Liegenschaften.VLI_ID
where VL_Liegenschaften.VLI_OMDF_ID IS NOT NULL
) t
join VL_Wohneinheiten on t.VLW_OTOID = VL_Wohneinheiten.VLW_OTOID) t
on (t.VLW_Liegenschaft = VL_Liegenschaften.VLI_ID
and VL_Liegenschaften.VLI_OMDF_ID IS NULL)
when matched then
update set VL_Liegenschaften.VLI_OMDF_ID = t.VLI_OMDF_ID
;
这是我的查询,不幸的是我无法强制执行。
错误信息:
MERGE 语句多次尝试更新或删除同一行。当目标行匹配多个源行时会发生这种情况。一个 MERGE 语句不能重复更新/删除目标表的同一行。优化 ON 子句以确保目标行至少匹配一个源行,或使用 GROUP BY 子句对源行进行分组。
**我的表和你的一样,你只是做了两次 VLW_Liegenschaft,我的链接是通过 tbl1 VLW_Liegenschaft 到 tbl2 VLI_ID
解决方案
如果我理解得很好,你可以做这样的事情,在 OTO_ID 上使用自联接来获取值。
declare @tbl as table (
OTO_ID varchar(15)
,VLI_OMDF_ID varchar(15)
);
insert into @tbl values ('a18d5', 'hhgg'), ('a18d5', NULL), ('asasad', 'ffff'), ('asasad', NULL);
update t
set t.VLI_OMDF_ID = t2.VLI_OMDF_ID
from @tbl t
inner join @tbl t2
on t.OTO_ID = t2.OTO_ID
where t.VLI_OMDF_ID is NULL
推荐阅读
- c++ - 如何将整数输入到向量中
那是空的? - python - 如何在python中创建一个多维数组
- javascript - JavaScript ES6 过滤器数组
- wso2 - 仅为某些请求删除安全性 wso2 api manager
- javascript - 为什么它总是返回'foo'?
- python - 如何在 python 中将参数传递给 apoc.export.csv.query?
- python - 需要帮助围绕现有脚本创建复杂循环
- r - r中将整数转换为日期格式的函数出错,错误:“不知道如何转换'。' 上课“日期””
- azure - 通过 IAC 将证书上传到 Azure Function App
- codeigniter - 无法在 CodeIgniter 中加载自定义库