Mysql 如何从表中选择复杂数据并将其从同一表中删除
我有一个反馈表,其中包含用户反馈和根据某个实体的评级。在某些情况下,多个用户对同一实体进行了投票,这是不可取的,并且由于出现故障而进入了系统 表架构有点像这样:Mysql 如何从表中选择复杂数据并将其从同一表中删除,mysql,mysql-error-1093,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) i
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)
无法从同一个表中选择和删除(即,如果它出现在子查询中)。我在数据库方面没有太多的专业知识,我不允许使用任何编程语言来做同样的事情:(
关于如何仅对查询执行此操作,有什么建议吗?在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
)
稍后在这条评论中签出链接,它会给你答案。你的表是innodb还是MySIAM?@Yoram我的表是innodb。OK,请检查。因为MySIAM在执行插入、更新或删除等操作时会锁定表。但也不可能这样做,你可以通过签出链接的方式:)@yoramdeLangen!!!现在无法访问该页。。。。我一分钟前就可以这么做了…对不起,是链接中的一个输入错误:哈哈…这是什么魔法!!??愚弄MySQL:D@RickeshJohn . . . 子查询的附加级别强制MySQL实例化表(或者至少让编译器意识到表是实例化的,绕过警告)。