1

これでうまくいくはずだと思ったのですが、ご覧のとおり、エラーが発生しています。ここでの目標は、2 つの列を使用して重複を定義することにより、重複を削除することです。最初のリストはすべての重複で、2 番目のリストは行 ID を使用して、各重複セットの 1 つが確実に保持されるようにします。ヘルプ!

DELETE FROM tbl_events_temp WHERE tbl_events_temp.event_id IN (
    SELECT F.event_id
    FROM tbl_events_temp AS F
    WHERE EXISTS (
        SELECT airport_id, event_from, Count( event_id )
        FROM tbl_events_temp
        WHERE tbl_events_temp.airport_id = F.airport_id
        AND tbl_events_temp.event_from = F.event_from
        AND tbl_events_temp.airport_id != ''
        GROUP BY tbl_events_temp.airport_id, tbl_events_temp.event_from
        HAVING Count( tbl_events_temp.event_id ) >1
    )
)
AND tbl_events_temp.event_id NOT
IN (
    SELECT Min( event_id )
    FROM tbl_events_temp AS F
    WHERE EXISTS (
        SELECT airport_id, event_from, Count( event_id )
        FROM tbl_events_temp
        WHERE tbl_events_temp.airport_id = F.airport_id
        AND tbl_events_temp.event_from = F.event_from
        GROUP BY tbl_events_temp.airport_id, tbl_events_temp.event_from
        HAVING Count( tbl_events_temp.event_id ) >1
    )
    GROUP BY airport_id, event_from
)

エラー:

MySQL said: Documentation
#1093 - You can't specify target table 'tbl_events_temp' for update in FROM clause 
4

1 に答える 1

1

あなたが望むのは JOIN を使用した DELETE だと思います。これをすばやくまとめたので、サブクエリが削除するレコードを正しく識別していることを確認してください。

DELETE tbl_events_temp
FROM tbl_events_temp
INNER JOIN (SELECT airport_id, event_from, Count(event_id),MIN(event_id)'event_id'
            FROM tbl_events_temp
            GROUP BY tbl_events_temp.airport_id, tbl_events_temp.event_from
            HAVING Count( tbl_events_temp.event_id ) >1
            )sub
ON tbl_events_temp.event_id = sub.event_id
于 2013-05-24T04:26:24.383 に答える