2011-07-20 82 views
2

Possible Duplicate:
SQL Delete: can't specify target table for update in FROM clause如何通過

我只有一個表(這個表TAB),代表大學考試用組的MySQL刪除數據庫記錄。我有以下屬性:課程名稱,課程代碼和年份。我想刪除有一個基數小於100的所有課程,如果鍵入

select CourseName from TAB group by CourseName having count(CourseName) < 100; 

我有一個確切的結果。但是,如果我想刪除這個項目我嘗試用

delete from TAB where CourseName not in (select CourseName from TAB group by CourseName having count(CourseName) > 100); 

但系統會返回一個錯誤:

Error Code: 1093 You can't specify target table 'TAB' for update in FROM clause

我怎麼也刪除這些記錄?

回答

3

請在下面的鏈接看到答案。這將解決您的問題:

基本上,你不能刪除(修改),您在選擇使用相同的表。在該頁面上記錄的方法有很多。

以下將通過使嵌套select臨時表工作。

delete from TAB 
where CourseName not in (select temp.CourseName 
         from (select t.CourseName 
           from TAB t 
           group by t.CourseName 
           having count(t.CourseName) > 100 
          ) as temp 
         ) 
+0

它的作品..!謝謝=) – Baduel

0

一個最簡單的方法是從你的第一個查詢創建一個臨時表,然後在第二份聲明中刪除所有臨時表中不存在的課程。

+0

好吧,我怎樣才能創建一個臨時表? – Baduel

0
$result=mysql_query("select CourseName from TAB group by CourseName having count(CourseName) < 100"); 
while($row=mysql_fetch_array($result)){ 
mysql_query("delete from tab where courses='$row[0]'"); 
} 
+0

刪除結果單獨使用SQL服務器端的更多帶寬和處理能力。它需要下載Web服務器不需要的成千上萬行的列表,然後再執行十萬條SQL語句。 –

+0

對,謝謝 – Rasel

0

也許這可能工作?

DELETE FROM tab AS a 
INNER JOIN (select CourseName from TAB group by CourseName having count(Coursename)>100) as b 
ON a.CourseName = b.coursename