我有表稱爲調度程序。它包含以下幾列:如何刪除重複行但保留1基於兩列
ID
sequence_id
schedule_time (timestamp)
processed
source_order
我需要從表中刪除重複的行,但保持1列,其中加工= 0
我有表稱爲調度程序。它包含以下幾列:如何刪除重複行但保留1基於兩列
ID
sequence_id
schedule_time (timestamp)
processed
source_order
我需要從表中刪除重複的行,但保持1列,其中加工= 0
DELETE yourTable FROM yourTable LEFT OUTER JOIN (
SELECT MIN(ID) AS minID FROM yourTable WHERE processed = 0 GROUP BY schedule_time, source_order
) AS keepRowTable ON yourTable.ID = keepRowTable.minID
WHERE keepRowTable.ID IS NULL AND processed = 0
我申請此職位; P How can I remove duplicate rows? 你見過嗎?
--fixed version--
DELETE yourTable FROM yourTable LEFT OUTER JOIN (
SELECT MIN(ID) AS minID FROM yourTable WHERE processed = 0 GROUP BY schedule_time, source_order
) AS keepRowTable ON yourTable.ID = keepRowTable.minID
WHERE keepRowTable.minID IS NULL AND processed = 0
謝謝,但稍有錯誤keepRowTable.minID,而不是keepRowTable.ID –
感謝您的更正。對不起,我錯了。我已經修復它作爲你的建議。 – ittgung
對於MySQL具有特定sequence_id相同schedule_time和source_order
DELETE a from tbl a , tbl b WHERE a.Id>b.Id and
a.sequence_id= b.sequence_id and a.processed=0;
查詢需要很多時間來執行。我有3000行 –
嘗試這個http://stackoverflow.com/questions/3311903/remove-duplicate-rows-in-mysql – Meherzad
其執行時間太長。 –
刪除重複的最快方法 - 絕對是通過添加索引,迫使他們出來,只留下一個各留在表的副本:
ALTER IGNORE TABLE dates ADD PRIMARY KEY (
ID
sequence_id
schedule_time
processed
source_order
)
現在,如果你有一個密鑰,你可能需要刪除它等等,但問題是,當你添加一個帶有IGNORE的唯一密鑰到一個帶有重複項的表中時 - bahavior是刪除所有額外的記錄/重複項。因此,在您添加此密鑰後,您現在只需要再次將其刪除即可創建新的重複項目:-)
現在,如果您需要執行更復雜的過濾(對女巫之一進行復制以保持您可以不只是包含在索引中 - 儘管不太可能),您可以在您選擇並輸入所需內容的同時創建一個表格 - 全部在同一個查詢中:
CREATE TABLE tmp SELECT ..fields.. GROUP BY (..what you need..)
DROP TABLE original_table
ALTER TABLE tmp RENAME TO original_table_name
您能給出樣本記錄嗎? –
一個非常簡單的解決方案是 '從表中刪除ID不在(選擇不同記錄的ID)' – Techmonk