1

いくつかのエンティティによるユーザー フィードバックと評価を含むフィードバック テーブルがあります。複数のユーザーが同じエンティティに望ましくない投票を行い、不具合によりシステムに侵入した場合があります。

テーブル スキーマは次のようになります。

qa_id,int(10) //id of the entity
score,smallint(1)
user_id,int(3)
feed_time,datetime

次のクエリを使用して、重複するエントリの 1 つを削除しようとしました (幸いなことに、追加のフィードバックは 1 つだけです)。

delete from feedback where md5(qa_id+feed_time) in 
(
    select md5(qa_id+feed_time)from feedback fb
    group by fb.qa_id
    having count(fb.qa_id) > 1
    order by fb.qa_id
    desc
)

次のように言って失敗します:

Error Code : 1093
You can't specify target table 'feedback' for update in FROM clause
(0 ms taken)

同じテーブルから選択して削除することはできません(つまり、サブクエリに表示される場合)。私はデータベースの専門知識があまりなく、同じことをするためにプログラミング言語を使用することは許可されていません。:(

クエリのみでこれを行う方法について何か提案はありますか?

4

1 に答える 1

3

MySQL でこれを修正する最も簡単な方法は、サブクエリをサブクエリの追加レイヤーに入れることです。

delete from feedback
where md5(qa_id+feed_time) in (select *
                               from (select md5(qa_id+feed_time)
                                     from feedback fb
                                     group by fb.qa_id
                                     having count(fb.qa_id) > 1
                                    ) t
                              )
于 2013-07-15T11:02:42.067 に答える