在子查询中无法从同一张表中进行删除操作。
在子查询中无法从同一张表中进行删除操作。
我知道这个问题在这个网站上已经被讨论过很多次,但是我找不到一个可行的解决方案,所以我想向你发帖,也许你可以帮助我...
我有一个音乐节,我需要淘汰掉前一天评价少于平均评价值20%的歌曲。
我尝试了这个:
DELETE FROM concorre AS C WHERE C.dataSer='2014-02-24' AND C.votoTot<(SELECT AVG(B.votoTot) FROM concorre AS B WHERE B.dataSer='2014-02-23')/5
它解决了“同一张表问题”,但仍然给我一个错误:
#1064 - 你的SQL语法有错误,请检查与你的MySQL服务器版本对应的手册,以获取正确的语法使用方式,位于 'AS C WHERE C.dataSer='2014-02-24' AND C.votoTot<(SELECT AVG(votoTot) FROM concor' 在第1行
MySQL不允许在外部查询中正在更新/删除的表在语句的任何子查询中被选中。
在这里,您正在从`concorre`表中删除并且在子查询中引用了相同的表。
您可以尝试类似以下的方法:MySQL DELETE FROM with subquery as condition
原因:MySQL不允许在外部查询中正在更新/删除的表在语句的任何子查询中被选中。
解决方法:参考链接MySQL DELETE FROM with subquery as condition中给出的解决方法。
在这段对话中,出现了一个关于"Cannot delete from same table in subquery"的问题。这个问题的原因是在子查询中无法从同一张表中进行删除操作。解决方法是使用表的别名来指定删除操作的表。
在这段对话中,有一个查询语句:
DELETE c FROM concorre C JOIN (SELECT AVG(B.votoTot) average FROM concorre B WHERE B.dataSer='2014-02-23') d WHERE C.dataSer='2014-02-24' AND C.votoTot < d.average /5
其中,DELETE语句的语法是DELETE [别名] FROM [表名]。在这个例子中,别名为c,表名为concorre。由于在子查询中引用了同一张表concorre,所以需要使用表的别名来指定删除操作的表,即DELETE c FROM concorre C。
如果不使用别名来指定删除操作的表,而是直接使用DELETE FROM concorre c,则会报错"Cannot delete from same table in subquery",因为在子查询中引用了和主查询相同的表。
通过使用别名来指定删除操作的表,可以成功解决"Cannot delete from same table in subquery"的问题。