删除具有最低ID的记录。

8

当我在MySQL中输入以下查询:

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

我收到了以下错误信息:
#1093 - You can't specify target table 'myTable' for update in FROM clause

问题是什么?

正确的等价物是什么?

7个回答

13

基本上在MySQL中,您不能对用于SELECT部分的表进行更新。有关详细信息,请查看文档:http://dev.mysql.com/doc/refman/5.6/en/update.html

理论上每个DELETE都是一个UPDATE,这就是为什么会出现此错误的原因。

您可以简单地执行以下操作:

DELETE FROM myTable 
ORDER BY my_id
LIMIT 1;

最小ID不能为1。那种情况下怎么办? - Amit
1
1 指您要删除的记录数量,与 ID 无关。 - huzeyfe

5

try

DELETE FROM myTable ORDER BY ID LIMIT 1;


1
@amit LIMIT 1并不意味着我们正在寻找值为1的ID。它意味着将结果集限制为一行。 - summerbulb

4

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

现在你不会再遇到任何错误。

Cheers..!


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

1
在mySql中,你不能在子查询中引用myTable,这就是整个问题的所在... - Amit

0
DELETE FROM myTable ORDER BY ID ASC LIMIT 1

0

试试这个

DELETE FROM `table_name` ORDER BY id LIMIT 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接