Удаление строки на основе максимального значения
Как я могу структурировать запрос 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_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 ;
кроме перехода к базе данных дважды, Есть ли что-то неправильное в этой технике?