Jay*_*len 15 mysql sql-server openquery sql-insert
我试图使用"OPENQUERY"从MS SQL Server将记录插入MySQL数据库,但我想要做的是忽略重复的密钥消息.因此,当查询遇到重复时,请忽略它并继续.
我可以做些什么来忽略重复?
这是我在做的事情:
问题是,当将表A连接到表B时,有时我会在表B中找到2条以上的记录,这些记录与我要查找的条件相匹配,这会导致我的数据集中的值A.record_id超过2倍,然后将其插入表A中这导致了问题.注意我可以使用聚合函数来消除记录.
Gor*_*off 13
我认为没有具体的选择.但这很容易做到:
insert into oldtable(. . .)
select . . .
from newtable
where not exists (select 1 from oldtable where oldtable.id = newtable.id)
Run Code Online (Sandbox Code Playgroud)
如果有多组唯一键,则可以添加其他not exists语句.
编辑:
对于修订后的问题:
insert into oldtable(. . .)
select . . .
from (select nt.*, row_number() over (partition by id order by (select null)) as seqnum
from newtable nt
) nt
where seqnum = 1 and
not exists (select 1 from oldtable where oldtable.id = nt.id);
Run Code Online (Sandbox Code Playgroud)
该row_number()函数为一组行中的每一行分配一个序号.该组由partition by声明定义.数字从1开始并从那里开始递增.该order by条款说您不关心订单.每个id只有一行的值为1.重复行的值大于1.在seqnum = 1每个ID选一行.
Bar*_*ein 11
如果您使用的是SQL Server 2008+,则可以使用if MERGE来执行INSERTif不存在的行或者UPDATE.
例:
MERGE
INTO dataValue dv
USING tmp_holding_DataValue t
ON t.dateStamp = dv.dateStamp
AND t.itemId = dv.itemId
WHEN NOT MATCHED THEN
INSERT (dateStamp, itemId, value)
VALUES (dateStamp, itemId, value)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31471 次 |
| 最近记录: |