gpt4 book ai didi

mysql - 在连接两个表时使用 OPENQUERY 提取数据时如何忽略重复键?

转载 作者:IT老高 更新时间:2023-10-29 00:06:47 24 4
gpt4 key购买 nike

我正在尝试使用“OPENQUERY”从 MS SQL Server 将记录插入 MySQL 数据库,但我正在尝试做的是忽略重复键消息。因此,当查询遇到重复项时,请忽略它并继续。

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

这是我正在做的:

  1. 使用“OpenQuery”从 MySQL 中提取记录以定义 MySQL“A.record_id”
  2. 从此处“使用特定条件而不是直接 ID”将这些记录加入 MS SQL Server 中的记录,我在 SQL Server 中找到了一个新的相关“B.new_id”记录标识符。
  3. 我想将找到的结果插入到 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)

如果有多个唯一键,您可以添加额外的 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);

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

关于mysql - 在连接两个表时使用 OPENQUERY 提取数据时如何忽略重复键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21220753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com