1

我有一个叫做调度程序的表。它包含以下列:

ID
sequence_id
schedule_time (timestamp)
processed
source_order

我需要从表中删除重复的行,但保留 1 行具有相同的 schedule_time 和 source_order 用于特定的 sequence_id 其中处理 = 0

4

3 回答 3

1
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如何删除重复的行? 你看到了吗?

--固定版本--

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
于 2013-02-08T09:41:02.647 回答
0

对于 mysql

DELETE a from  tbl a , tbl b WHERE a.Id>b.Id and
a.sequence_id= b.sequence_id and a.processed=0;
于 2013-02-08T06:51:38.727 回答
0

删除重复项的最快方法 - 绝对是通过添加索引来强制删除它们,在表中只留下一个副本:

ALTER IGNORE TABLE dates ADD PRIMARY KEY (

  ID
  sequence_id
  schedule_time
  processed
  source_order
)

现在,如果您有一个键,您可能需要删除它等等,但关键是,当您将带有 IGNORE 的唯一键添加到具有重复项的表中时 - 行为是删除所有额外的记录/重复项。所以在你添加了这个键之后,你现在只需要再次删除它就可以制作新的副本了:-)

现在,如果您需要进行更复杂的过滤(在其中一个重复项上保留您不能只包含在索引中 - 尽管不太可能),您可以在选择并输入您想要的内容的同时创建一个表- 都在同一个查询中:

CREATE TABLE tmp SELECT ..fields..  GROUP BY ( ..what you need..)

DROP TABLE original_table

ALTER TABLE tmp RENAME TO original_table_name
于 2013-02-08T10:11:08.723 回答