10

如何构造一个 mySQL 查询以根据最大值删除一行。

我试过

WHERE jobPositonId = max(jobPostionId)

但有错误?

4

4 回答 4

20
DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1
于 2010-09-01T19:20:49.230 回答
16

采用:

DELETE FROM TABLE t1 
       JOIN (SELECT MAX(jobPositonId) AS max_id FROM TABLE) t2 
 WHERE t1.jobPositonId  = t2.max_id

请注意,如果有重复,所有具有该值的行都将被删除。jobPositonId

关于 1093 错误的愚蠢部分是,您可以通过在自引用之间放置一个子查询来绕过它:

DELETE FROM TABLE
 WHERE jobPositonId = (SELECT x.id
                         FROM (SELECT MAX(t.jobPostionId) AS id 
                                 FROM TABLE t) x)

解释

MySQL 仅在使用UPDATE&DELETE语句时检查是否存在对正在更新的同一个表的第一级子查询。这就是为什么将它放在第二级(或更深)子查询替代方案中的原因。但它只是检查子查询 - JOIN 语法在逻辑上是等效的,但不会触发错误。

于 2010-09-01T18:27:22.443 回答
0
DELETE FROM `table_name` WHERE jobPositonId = (select max(jobPostionId) from `table_name` limit 1)

或者

DELETE FROM `table_name` WHERE jobPositonId IN (select max(jobPostionId) from `table_name` limit 1)
于 2010-09-01T18:28:00.850 回答
0

这有效:

SELECT @lastid := max(jobPositonId ) from t1; 
DELETE from t1 WHERE jobPositonId = @lastid ; 

除了去数据库两次之外,这种技术有什么问题吗?

于 2012-06-07T16:03:20.267 回答