Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 允许插入重复项的Merge语句_Sql_Sql Server_Database_Tsql_Merge - Fatal编程技术网

Sql 允许插入重复项的Merge语句

Sql 允许插入重复项的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 ----------------

我有两张桌子

表1

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