Удаление строки на основе максимального значения

Как я могу структурировать запрос mySQL для удаления строки на основе максимального значения.

пробовал

WHERE jobPositonId = max(jobPostionId)

но есть ошибки?

4 ответов


использование:

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 операторы, если есть подзапрос первого уровня к той же таблице, которая находится усовершенствованный. Вот почему размещение его на втором уровне (или глубже) подзапроса работает. Но это только проверка подзапросов - синтаксис соединения логически эквивалентен, но не вызывает ошибку.


DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1

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 ; 

кроме перехода к базе данных дважды, Есть ли что-то неправильное в этой технике?