我有表称为调度程序。它包含以下几列:如何删除重复行但保留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