我一直在研究基於特定字段查找重複行的正確方法。我想我需要更多一點的幫助 -MySQL - 將重複行添加到歸檔表中,然後刪除重複行
SELECT *
FROM enrollees
INNER JOIN (SELECT first_name, last_name, address1, city, state, zip, program_instance_id, MIN(id) AS MinId, COUNT(id) AS count FROM enrollees GROUP BY first_name, last_name, address1, city, state, zip, program_instance_id) b
ON enrollees.first_name = b.first_name
AND enrollees.last_name = b.last_name
AND enrollees.address1 = b.address1
AND enrollees.city = b.city
AND enrollees.state = b.state
AND enrollees.zip = b.zip
AND count > 1
AND enrollees.program_instance_id = b.program_instance_id
AND enrollees.id != MinId;
的目標是採取複製,並把它們存檔表(enrollees_duplicates),然後從直播表中刪除重複的(參保)。我試着寫一個查詢來查找和插入重複的行,但它給了我下面的錯誤:
「列數並不在行1匹配值計數」
我嘗試使用的查詢是:
INSERT INTO enrollees_duplicates (SELECT *
FROM enrollees
INNER JOIN (SELECT first_name, last_name, address1, city, state, zip, program_instance_id, MIN(id) AS MinId, COUNT(id) AS count FROM enrollees GROUP BY first_name, last_name, address1, city, state, zip, program_instance_id) b
ON enrollees.first_name = b.first_name
AND enrollees.last_name = b.last_name
AND enrollees.address1 = b.address1
AND enrollees.city = b.city
AND enrollees.state = b.state
AND enrollees.zip = b.zip
AND count > 1
AND enrollees.program_instance_id = b.program_instance_id
AND enrollees.id != MinId);
我認爲這是因爲我沒有檢索INNER JOIN select中的所有列?如果是這樣的話,如果我將它更改爲SELECT *(使用MinId和count增加),它會不會拋出相同的錯誤,因爲在新表中不存在兩個額外的列?
有什麼辦法可以用SQL查詢完成所有的工作,而不必選擇重複項,將它們存儲在PHP數組中,然後使用另一個SQL查詢來拉取每一行,將其插入到重複表中,然後另一個 SQL查詢刪除重複行。
我的意圖是使用兩個查詢。一個用於將所有重複行插入到存檔表中,另一個用於刪除重複行。如果它可以以某種方式被製作成一個查詢來查找重複項,將它們插入到存檔表中,然後刪除它們 - 所有這一切都會在一次運行中更好。
作爲新來的這個領域,任何幫助或指導,將不勝感激。
建議 - 請看看您是否可以保留您的問題描述的重點,這有助於甚至鼓勵人們試圖幫助您。 – Vishal
我只是想徹底。解釋我的目標是什麼以及我要走什麼路線,以防出現一個更好,更有效的方法。對不起,如果它看起來像散漫,我只是想盡可能多地提供信息,所以沒有人需要更多。 –