数据库
首页 > 数据库> > mysql – MS SQL Server中的“INSERT IGNORE”等价物是什么?

mysql – MS SQL Server中的“INSERT IGNORE”等价物是什么?

作者:互联网

我试图使用“OPENQUERY”从MS SQL Server将记录插入MySQL数据库,但我想要做的是忽略重复的密钥消息.因此,当查询遇到重复时,请忽略它并继续.

我可以做些什么来忽略重复?

这是我在做的事情:

>使用“OpenQuery”从MySQL中提取记录来定义MySQL“A.record_id”
>将这些记录连接到MS SQL Server中的记录“具有特定条件而非直接ID”,我在此处找到SQL Server中新的相关“B.new_id”记录标识符.
>我想将找到的结果插入到MySQL中的新表中,如同A.record_id,B.new_id在新表中,我将A.record_id设置为该表的主键.

问题是,当将表A连接到表B时,我有时会在表B中找到2条记录,这些记录符合我要查找的标准,这会导致我的数据集中的值A.record_id为2次,然后将其插入表A中问题.注意我可以使用聚合函数来消除记录.

解决方法:

我认为没有具体的选择.但这很容易做到:

insert into oldtable(. . .)
    select . . .
    from newtable
    where not exists (select 1 from oldtable where oldtable.id = newtable.id)

如果有多个唯一键集,则可以添加其他不存在的语句.

编辑:

对于修订后的问题:

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);

row_number()函数为一组行中的每一行分配一个序号.该组由partition by语句定义.数字从1开始并从那里开始递增. order by子句表示您不关心订单.每个id恰好一行的值为1.重复行的值大于1. seqnum = 1每个id只选择一行.

标签:openquery,sql-server,mysql,sql-insert
来源: https://codeday.me/bug/20191005/1856797.html