gpt4 book ai didi

MySQL更新重复记录

转载 作者:行者123 更新时间:2023-11-28 23:28:50 25 4
gpt4 key购买 nike

我什至不确定这在查询中是否可行,但可以。我正在清理从第 3 方进入我们系统的数据。他们正在为一组中的每个人创建一个不太独特的唯一字符串,该字符串由名字的前 3 个字母和 yyyymmdd 格式的 dob 组成。在少数重复项上,我想将 -1、-2、-3 等附加到该 ID,以便它们真正独一无二。

JOH19700101     0001    JOHN SMITH    1970-01-01
JOH19700101 0001 JOHNSON SMITH 1970-01-01
JOH19700101 0002 JOHN SMITH 1970-01-01

在上面,前两个 ID (JOH19700101) 需要附加 -1 和 -2,因为它们在同一组 (0001) 中。第三个可以保持不变,因为他在不同的组 (0002)。

选择重复项非常简单:

SELECT x.id, x.uid, x.group, x.name, x.dob
FROM import x
INNER JOIN (
SELECT uid
FROM import
GROUP BY group, uid
HAVING COUNT(uid) > 1) z ON x.uid = z.uid;

有没有办法对此添加更新,以便前两个样本分别获得 JOH19700101-1 和 JOH19700101-2 的新 UID?

最佳答案

这将为您提供独特的 uid 值,尽管它可以从一个小的改进中获益。现在附加的数字不断递增,所以你的第一对 dupes 将得到 -1 和 -2 附加到他们的 uid,然后是下一对 -3 和 -4,依此类推。

应该可以以某种方式重置@inc,但是就目前而言,这将确保您的所有 uid 值都是唯一的,并且不同组中的相同 uid 将保持不变。

SET @inc :=0;

UPDATE
`import` i
JOIN (
SELECT uid, `group`
FROM `import`
GROUP BY `group`, uid
HAVING COUNT(uid) > 1) d ON
i.uid = d.uid AND
i.group = d.group

SET
i.uid = CONCAT(i.uid, '-',@inc:=@inc+1)

关于MySQL更新重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126313/

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