2012-03-22 98 views
4

當我鍵入此查詢在MySQL:與最低的ID刪除記錄

DELETE FROM myTable WHERE ID = (SELECT Min(ID) FROM myTable) 

我收到以下錯誤信息:

#1093 - You can't specify target table 'myTable' for update in FROM clause 

問題是什麼?

什麼是等同的權利?

回答

6

基本上在MySQL中,你不能在你的SELECT部分使用表做一個更新。有關詳細信息,您可以檢查以下行爲:http://dev.mysql.com/doc/refman/5.6/en/update.html

理論上,每個DELETE都是UPDATE,因此這就是爲什麼會出現此錯誤的原因。

你可以簡單地做以下:

DELETE FROM myTable 
ORDER BY my_id 
LIMIT 1; 
+0

最小ID可能不是1.在那種情況下是什麼? – aProgrammer 2012-03-22 09:34:09

+0

1表示要刪除的記錄數。它與ID無關。 – huzeyfe 2012-03-22 10:04:45

+1

+1一個很酷的回答.... – aProgrammer 2012-03-22 11:03:27

5

嘗試

DELETE FROM myTable ORDER BY ID LIMIT 1;

+1

@amit LIMIT 1並不意味着我們正在尋找的值爲1。這意味着限制結果集一行的ID。 – summerbulb 2012-03-22 09:40:03

0
DELETE FROM myTable WHERE ID = (SELECT ID FROM myTable ORDER BY ID LIMIT 1) 
+0

在mySql中,您不能在子查詢中引用myTable,這是整個問題.... – aProgrammer 2012-03-22 11:04:33

0
DELETE FROM myTable ORDER BY ID ASC LIMIT 1 
2

在MySQL中,你不能修改您在SELECT部分​​使用相同的表。 此行爲記錄在:http://dev.mysql.com/doc/refman/5.6/en/update.html

而不是嵌套的子查詢,執行操作分兩部分,或者使用簡單的where子句。

嘗試:

$min_id = SELECT Min(ID) FROM myTable 
DELETE FROM myTable WHERE ID = $min_id 

現在你不應得到任何錯誤。

乾杯..!

0

試試這個

DELETE FROM `table_name` ORDER BY id LIMIT 1;