我该如何构建一个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)
在使用UPDATE
和DELETE
语句时,MySQL只会检查是否存在一个对同一张表进行更新的第一级子查询。因此,将其放在第二级(或更深层次)子查询中是可行的。但它只检查子查询 - 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 ;
除了两次访问数据库之外,这种技术还有什么问题吗?