2

我知道这个论点已经在这个网站上解决了很多次,我只是找不到一个可行的解决方案,所以我想我会把我的具体案例发布给你,也许你可以帮助我......

我有一个音乐节,我需要从中剔除低于前一天晚上平均评价 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 服务器版本相对应的手册,以在第 1 行的 'AS C WHERE C.dataSer='2014-02-24' AND C.votoTot<(SELECT AVG(votoTot) FROM concor' 附近使用正确的语法

4

2 回答 2

0

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

在这里,您从表中删除concorre并在子查询中引用同一个表。

你可以尝试这样的事情:MySQL DELETE FROM with subquery as condition

于 2014-03-03T13:23:03.993 回答
0

尝试这个

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 
于 2014-03-03T12:14:01.243 回答