Mysql

對沒有父母的孩子進行分組的資料結構

  • December 9, 2021

我有一個名字列表

ID    Name
1     John Doe
2     J. Doe
3     John Doe
4     John Doe

使用不同的方法,我通過檢查他們的行為來檢查哪些名字是同一個人。例如,在第 1 步中,我發現 ID 1-3 是一個人,ID 4 是另一個人。

顯然,我需要給每個人一個 ID 來分組他們

ID    Name        PersonID
1     John Doe    1
2     J. Doe      1
3     John Doe    1
4     John Doe    2

在第 2 步中,我發現 ID 2 和 4 也是同一個人(使 ID 1-4 為同一個人)。我應該如何更新父母?

我想我應該在最後階段創建 PersonID。我需要一個臨時模式來對記錄進行分組。

您對逐步更新同一個人的模式有什麼建議嗎?

在第 2 步中,我發現 ID 2 和 4 也是同一個人(使 ID 1-4 為同一個人)。我應該如何更新父母?

例如,它可以是

SET @dup1 := 2;
SET @dup2 := 4;

UPDATE test t0
JOIN test t1
JOIN test t2
SET t0.PersonID = t1.PersonID
WHERE t1.id = @dup1
 AND t2.id = @dup2
 AND t0.PersonID IN (t1.PersonID, t2.PersonID);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=825e1c58b5e7fae31eca9485fa4124ce

我建議你有 2 個具有以下結構的輔助表

CREATE TABLE NewPersons(
ID INT Identity, 
Name VARCHAR(50)
)

CREATE TABLE PersonMappings(
NewPersonsID INT, 
PersonID INT
)

在第一步之後,您將 1 行插入到NewPersons具有您要使用的正確名稱的表中。例如

ID          Name
----------- --------------------------------------------------
1           John Doe

PersonMappings 表中的 3 行表示新創建的人員映射到 ID 為 1、2 和 3 的人員。

NewPersonID PersonID
----------- -----------
1           1
1           2
1           3

發現 person id 2 和 4 相同後,您需要在映射表中搜尋此 id,並將該 personID 與對應的 NewPersonID 對插入。

SELECT NewPersonID
FROM PersonMappings
WHERE PersonID = 2

NewPersonID = 1從此查詢中獲得併將(1, 4)對插入PersonMappings表中

引用自:https://dba.stackexchange.com/questions/303712