在子查询中无法从同一张表中进行删除操作。

20 浏览
0 Comments

在子查询中无法从同一张表中进行删除操作。

我知道这个问题在这个网站上已经被讨论过很多次,但是我找不到一个可行的解决方案,所以我想向你发帖,也许你可以帮助我...

我有一个音乐节,我需要淘汰掉前一天评价少于平均评价值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行

0
0 Comments

MySQL不允许在外部查询中正在更新/删除的表在语句的任何子查询中被选中。

在这里,您正在从`concorre`表中删除并且在子查询中引用了相同的表。

您可以尝试类似以下的方法:MySQL DELETE FROM with subquery as condition

原因:MySQL不允许在外部查询中正在更新/删除的表在语句的任何子查询中被选中。

解决方法:参考链接MySQL DELETE FROM with subquery as condition中给出的解决方法。

0
0 Comments

在这段对话中,出现了一个关于"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"的问题。

0