如何构造一个 mySQL 查询以根据最大值删除一行。
我试过
WHERE jobPositonId = max(jobPostionId)
但有错误?
如何构造一个 mySQL 查询以根据最大值删除一行。
我试过
WHERE jobPositonId = max(jobPostionId)
但有错误?
DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1
采用:
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 语法在逻辑上是等效的,但不会触发错误。
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)
这有效:
SELECT @lastid := max(jobPositonId ) from t1;
DELETE from t1 WHERE jobPositonId = @lastid ;
除了去数据库两次之外,这种技术有什么问题吗?