MySQL在一个表

时间:2017-08-28 18:13:24

标签: mysql

希望我能清楚地解释清楚。我有一个表,其中包含组内人员需要的唯一ID。使用名字的前3个字母和出生日期生成ID。通常,对于较小的组(小于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

我想要做的是ID 2和3分别在它们的UID字段附加-1和-2,这样1,2和3现在是唯一的(GROUP + UID)。 ID 4将被忽略,因为GROUP是不同的

我从这样的事情开始:

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;

对于ID 2和3,应该设置duplicate_record字段= 1.但是我仍然需要向这些UID附加-1,-2,-3等,我不知道该怎么做。也许我不应该只为重复设置一个标志= 1,而应该设置重复记录的数量?

1 个答案:

答案 0 :(得分:1)

如果group, UID元组是唯一的(并且它应该是),为什么不insert ignore第一个(没有附加任何值),检查SELECT ROW_COUNT();影响了多少行,如果为零,请附加-1?如果你把它放入for循环(伪代码):

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;