2017-08-28 37 views
0

希望我可以清楚地解釋這一點。我有一張表格,該表格必須是組內人員的唯一ID。這些ID使用名字和出生日期的前3個字母生成。通常,對於較小的組(小於500),這可以正常工作。然而,在大羣體中,我們確實碰到了一些重複。然後,我們只需將-1,-2,-3等附加到任何重複的ID。例如:MySQL在一張表中更新基於匹配和不匹配條件的重複ID

ID GROUP   UID   FIRST_NAME 
1  123456   ALE1990ALEXIS 
2  123456   ALE1990ALEXANDER 
3  123456   ALE1990ALEJANDRO 
4  789789   ALE1990ALEX 

我想要做的是用於ID 2和3追加一個-1和-2分別到其UID字段,以便1,2和3是現在唯一的(GROUP + 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; 

這應該設置duplicate_record領域的ID 2和3 = 1,但後來我還是需要追加一個-1,-2,-3等這些UIDs,我不知道該怎麼做。也許而不是隻設置一個標誌= 1重複我應該設置重複記錄的計數?

+1

也許這將是簡單的解析ID,檢查附錄。如果存在,只需將其轉換爲int並添加1,重新追加和更新。當然,如果它不存在,你可以追加1. –

+0

爲什麼不總是*追加ID,這將保證UID將永遠是唯一的,無論組是什麼? – kmoser

回答

1

如果group, UID元組是唯一的(應該是),爲什麼不insert ignore第一個(不追加任何值),檢查多少行受到SELECT ROW_COUNT();,而如果是零,追加-1?如果你把它放在循環中(僞代碼):

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; 
+0

我標記爲接受,因爲它非常接近我在MySql之外做的。我只寫了一個快速腳本,可以通過這些ID解析並附加正確的-1,-2等。謝謝! – Steve