Sql 允许插入重复项的Merge语句
我有两张桌子 表1Sql 允许插入重复项的Merge语句,sql,sql-server,database,tsql,merge,Sql,Sql Server,Database,Tsql,Merge,我有两张桌子 表1 Id | medicineName ------------------------- 1 | benalgin 2 | xanax 3 | xanax ------------------------- 我有第二个表,我需要将上表中的ID插入第二个表(medicineId列中有空值),我需要使用MERGE语句来插入重复项 表2 medicineId | medicine ----------------
Id | medicineName
-------------------------
1 | benalgin
2 | xanax
3 | xanax
-------------------------
我有第二个表,我需要将上表中的ID插入第二个表(medicineId列中有空值),我需要使用MERGE语句来插入重复项
表2
medicineId | medicine
-------------------------
null | xanax
null | xanax
null | operil
-------------------------
我尝试过此操作,但由于我需要具有不同ID的重复记录,因此出现错误:
无法插入或更新重复行
我认为您确实需要两个查询 首先
使用表1
中的id
之一更新表2中的现有记录:
update table2
set medicineId = (
select min(id) from table1 t1 where t1.medicineName = table2.medicine
)
然后插入丢失的记录:
insert into table2 (medicineId, medicine)
select id, medicineName
from table1 t1
where not exists (
select 1 from table2 t2 where t2.medicineId = t1.id and t2.medicine = t1.medicineName
)
更新后的表内容:
MEDICINEID | MEDICINE
:--------- | :-------
2 | xanax
2 | xanax
null | operil
药品
:--------- | :-------
2 | xanax
2 | xanax
空操作
插入后的表格内容:
MEDICINEID | MEDICINE
:--------- | :-------
2 | xanax
2 | xanax
null | operil
3 | xanax
1 | benalgin
药品
:--------- | :-------
2 | xanax
2 | xanax
空操作
3 | xanax
1 |贝纳金
请用您正在使用的数据库标记问题。当给定的医疗设备有2个id
s可用时,您要选择哪一个?例如,对于xanax,您想要2个还是3个?另外,为什么您特别想要使用merge
?它意味着更新或插入,而您似乎只需要更新。嘿@GMB我想为两行XANAX插入2和3。有没有办法合并两个表并允许重复?tnxI在每个表中可能有100行数据。。这就是为什么我想使用merge,如果您认为我可以使用Update或Insert一次插入/更新数据行,我想知道:)嗯,我想我明白您所说的,但我需要这段SQL代码。。目前这对我不起作用。:/或者我做错了什么?(我指的是更新查询)@qualified_net:什么不起作用?您是否收到一条错误消息,到底是哪一条?t2附近的语法不正确。参考此部分=>'update table2 t2'@Qualified_net:ok,回到我的一个原始问题:您使用的是哪个数据库?@Qualified_net:ok,我用使用SQLServer语法的解决方案更新了我的答案。
MEDICINEID | MEDICINE
:--------- | :-------
2 | xanax
2 | xanax
null | operil
3 | xanax
1 | benalgin