2017-04-08 27 views
0

私は何千ものレコード(重複した投稿を含む)を持っているので、古いレコードを削除したい(最新のレコードを残す)。MySQL古いレコードを削除する

私のコードは、問題がID上のそれのランダムなレコードをベースということである

DELETE a.* 
FROM dle_post AS a 
    INNER JOIN (
     SELECT title, MIN(id) AS min_id 
     FROM dle_post 
     GROUP BY title 
     HAVING COUNT(*) > 1 
    ) AS b ON b.title = a.title 
AND b.min_id <> a.id 

以下の通りです。私は本当にあなたの助けに感謝します!

+2

が、私は最大のIDを持つことになりますポストの最新バージョンを前提とするので、あなたは –

+0

@StefanoZaniniありがとう保存されるID選択することminの最大insteasを使用する必要があり、それが魅力のように働きました。 –

答えて

1

これを元にしたい場合は、サブクエリでMAX(date)を使用する必要があります。

DELETE a.* 
FROM dle_post AS a 
    INNER JOIN (
     SELECT title, MAX(date) AS maxdate 
     FROM dle_post 
     GROUP BY title 
     HAVING COUNT(*) > 1 
    ) AS b 
ON b.title = a.title 
AND a.date < b.maxdate 
+0

ありがとうございます。 –

-1

ちょうどあなたが削除して入れて、副選択にしたい投稿のSELECTクエリを作成します。

DELETE FROM dle_post WHERE id IN (SELECT id FROM dle_post WHERE ...) 

これは、より読みやすく、保守しています。

+0

これはエラーになります。 http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause – Barmar

+0

を参照してください。私はPostgreSQLをたくさん使っています。私はそこでこれを行うことができます。私は今日何かを学んだ。 –

+0

また、各グループの最新のレコード以外のすべてを削除したいので、「NOT IN」にする必要があります。 – Barmar