場景: MySQL 表中的重複行可能由多種來源引起,包括資料輸入錯誤。 刪除這些重複項對於維護資料完整性和最佳資料庫效能至關重要。
問題:挑戰在於刪除每個重複行中除一個實例之外的所有實例。
解決方法及注意事項:
重要提示:在執行任何 DELETE 查詢之前始終備份表。 錯誤執行的 DELETE 語句可能會導致不可逆轉的資料遺失。
方法一:保留ID最小的行
此方法保留 ID 值最小的行:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
方法2:保留ID最大的行
此替代方案保持具有最大 ID 值的行:
<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
提高大型表的效率:
對於非常大的表,以下INSERT ... SELECT DISTINCT
方法提供了更有效的解決方案:
<code class="language-sql">CREATE TEMPORARY TABLE tempTableName AS SELECT DISTINCT cellId, attributeId, entityRowId, value FROM tableName; TRUNCATE TABLE tableName; INSERT INTO tableName SELECT * FROM tempTableName; DROP TEMPORARY TABLE tempTableName;</code>
這將建立一個僅包含唯一行的臨時表,截斷原始表,然後使用臨時表中的唯一資料填充它。 對於大型資料集,這通常比使用 DELETE
更快。 請記得將 tableName
、cellId
、attributeId
、entityRowId
和 value
替換為您的實際欄位名稱。
以上是如何在保留單一實例的同時有效地從 MySQL 表中刪除重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!