Mysql
對沒有父母的孩子進行分組的資料結構
我有一個名字列表
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
表中