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