MySQL在一个表中基于匹配和不匹配条件更新重复ID

MySQL在一个表中基于匹配和不匹配条件更新重复ID,mysql,Mysql,希望我能解释清楚。我有一个表,其中包含组内人员所需的唯一ID。ID是使用名字和出生日期的前3个字母生成的。通常情况下,对于较小的组(小于500),这可以正常工作。然而,在大的群体中,我们确实发现了一些重复。然后,我们只需将-1、-2、-3等附加到任何重复的ID。例如: ID GROUP UID FIRST_NAME 1 123456 ALE19900123 ALEXIS 2 123456 ALE1

希望我能解释清楚。我有一个表,其中包含组内人员所需的唯一ID。ID是使用名字和出生日期的前3个字母生成的。通常情况下,对于较小的组(小于500),这可以正常工作。然而,在大的群体中,我们确实发现了一些重复。然后,我们只需将-1、-2、-3等附加到任何重复的ID。例如:

ID    GROUP          UID            FIRST_NAME
1     123456         ALE19900123    ALEXIS
2     123456         ALE19900123    ALEXANDER
3     123456         ALE19900123    ALEJANDRO
4     789789         ALE19900123    ALEX
我想做的是,对于ID2和ID3,分别在它们的UID字段中添加-1和-2,这样1、2和3现在是唯一的(组+UID)。ID 4将被忽略,因为组不同

我从以下内容开始:

UPDATE table A
  JOIN table B
    ON B.GROUP = A.GROUP
   AND B.UID = A.UID
   AND B.FIRST_NAME <> A.FIRST_NAME
   AND B.ID < A.ID
   SET A.duplicate_record = 1;
更新表A
联接表B
关于B组=A组
B.UID=A.UID
B.名字A.名字
B.ID

这将为IDS2和IDS3设置duplicate_record字段=1。但是,我仍然需要在那些UID中附加-1、-2、-3等等,我不知道该怎么做。也许我应该设置重复记录的计数,而不是仅仅为重复设置标志=1?

如果
组,UID
元组是唯一的(应该是唯一的),为什么不
插入忽略第一个(不附加任何值),检查受
选择行数()影响的行数,如果为零,则追加
-1
?如果将其放入for循环(伪代码):

而我<1000
将ignore插入人(组、uid、名字)值(123456、concat(他们的uid、“-”、i)、名字);
如果((选择行计数();)==1):
打破
i=i+1;
结束时;

也许解析ID、检查附加信息会很简单。如果它存在,只需将其转换为int并添加1、重新追加和更新。当然,如果它不存在,您可以只追加1。为什么不总是追加ID,这将保证UID在任何组中都是唯一的?我将其标记为已接受,因为它与我在MySql之外所做的非常接近。我刚刚编写了一个快速脚本,可以通过这些ID进行解析,并附加正确的-1、-2等。谢谢!
while i < 1000 do
    insert ignore into people (group, uid, first_name) values (123456, concat(their_uid, "-", i), first name);
    if ((select row_count();) == 1):
        break;
    i=i+1;
end while;