Mysql
使用 group by 和 count 刪除重複項
轉換以下查詢的最快方法是什麼:
SELECT COUNT(*) as c FROM tbl_fields WHERE fieldnotes IS NULL GROUP BY fieldno,fieldserial,id,fielddate,fieldsid HAVING COUNT(*) > 1;
… 到一個將刪除重複記錄?該表沒有任何主鍵並且包含數百萬個條目。
根據您的查詢,您在子句
fieldno,fieldserial,id,fielddate,fieldsid
中具有唯一性規則。GROUP BY
你可以試試這個:
CREATE TABLE tbl_fields_unique LIKE tbl_fields; ALTER TABLE tbl_fields_unique ADD UNIQUE KEY unq (fieldno,fieldserial,id,fielddate,fieldsid); INSERT IGNORE INTO tbl_fields_unique SELECT * FROM tbl_fields; ALTER TABLE tbl_fields RENAME tbl_fields_old; ALTER TABLE tbl_fields_unique RENAME tbl_fields;
這將過濾具有重複
fieldno,fieldserial,id,fielddate,fieldsid
欄位的行。查看新表。tbl_fields_unique
一旦您對錶格的內容感到滿意,請執行以下操作:ALTER TABLE tbl_fields RENAME tbl_fields_old; ALTER TABLE tbl_fields_unique RENAME tbl_fields;
試一試 !!!
如果您可以添加一個 ID 列並為每條記錄填充一個唯一值,那麼您應該能夠執行如下查詢
DELETE FROM tbl_fields WHERE <New ID Column> IN (SELECT MAX(<New ID Column>) FROM tbl_fields WHERE fieldnotes IS NULL GROUP BY fieldno,fieldserial,id,fielddate,fieldsid HAVING COUNT(*) > 1)
這將刪除重複項,然後您可以刪除
如果您有足夠的重複項,超出了 IN 語句的 SQL 限制,那麼您可以將 IN 語句的 ID 值插入到臨時表中並針對該表執行存在。