2014-03-03 43 views
1

我知道這個論點已經在本網站多次討論過,我只是找不到一個可行的解決方案,所以我想我會發布我的具體案例給你,也許你可以幫助我...無法從子查詢中的同一表中刪除

我有一個節日,我需要消除比前一天晚上的平均評價低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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS C WHERE C.dataSer='2014-02-24' AND C.votoTot<(SELECT AVG(votoTot) FROM concor' at line 1

+0

當你的子查詢將返回所有條目的相同值有你使用參數認爲,這將刪除有關子查詢的錯誤,並可能提高性能。 – talegna

+0

當命名錶時,你不應該使用'AS'。多數民衆贊成在當你命名列可以使用'AS' –

回答

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 
+0

您的查詢工作,非常感謝,但我沒有得到什麼「刪除C」的意思是...什麼是C – Febz

+0

這是一個考試,所以我需要請確保我瞭解它的每一個細節 – Febz

+0

c是您從中刪除的表的名稱。由於您加入了多個表格,因此您需要指出從哪個表格中刪除。 '從協調C'刪除c。由於delete語句中有多個表,所以'DELETE FROM concorre c'將失敗。但是'DELETE c'指示哪個表從中刪除與WHERE相匹配。 –

0

MySQL不允許在語句的任何子查詢中選擇外部查詢中正在更新/刪除的表。

這裏您將從concorre表中刪除並且在子查詢中引用相同的表。

你可以嘗試這樣的事情:MySQL DELETE FROM with subquery as condition