1

スケジューラと呼ばれるテーブルがあります。次の列が含まれます。

ID
sequence_id
schedule_time (timestamp)
processed
source_order

テーブルから重複する行を削除する必要がありますが、処理済み = 0 の特定の sequence_id に対して同じ schedule_time と source_order を持つ 1 行を保持する必要があります

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

重複を削除する最も速い方法は、インデックスを追加して重複を強制的に削除し、テーブルにそれぞれのコピーを1つだけ残すことです。

ALTER IGNORE TABLE dates ADD PRIMARY KEY (

  ID
  sequence_id
  schedule_time
  processed
  source_order
)

キーがある場合は、それを削除する必要があるかもしれませんが、重要なのは、IGNOREを使用して一意のキーを重複のあるテーブルに追加すると、余分なレコード/重複をすべて削除するという動作です。したがって、このキーを追加した後、新しい複製を作成できるようにするには、もう一度削除する必要があります:-)

これで、より複雑なフィルタリングを行う必要がある場合(可能性は低いですが、重複の1つを保持して、インデックスに含めることはできません)、必要なものを選択して入力すると同時にテーブルを作成できます。 -すべて同じクエリで:

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 に答える
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 に答える