如何从表中选择复杂数据并从同一个表中删除它

时间:2013-07-15 10:28:38

标签: mysql mysql-error-1093

我有一个反馈表,其中包含某些实体的用户反馈和评级。在某些情况下,多个用户对同一实体进行了投票,这是不可取的并且由于故障而进入系统。

表模式有点像这样:

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

我试图使用此查询删除其中一个重复条目(幸运的是只有一个额外的反馈):

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)

我不能从同一个表中选择和删除(即如果它出现在子查询中)。我在数据库方面没有太多的专业知识,我不允许使用任何编程语言来做同样的事情。 :(

有关如何仅使用查询执行此操作的任何建议?

1 个答案:

答案 0 :(得分: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
                              )