2012-03-22 86 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;