希望我能清楚地解释清楚。我有一个表,其中包含组内人员需要的唯一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,而应该设置重复记录的数量?
答案 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;