Удаление строки на основе максимального значения - PullRequest
7 голосов
/ 01 сентября 2010

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

Я пытался

WHERE jobPositonId = max(jobPostionId)

, но получил ошибку?

Ответы [ 4 ]

15 голосов
/ 01 сентября 2010
DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1
12 голосов
/ 01 сентября 2010

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

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 логически эквивалентен, но не вызывает ошибку.

1 голос
/ 01 сентября 2010
DELETE FROM `table_name` WHERE jobPositonId = (select max(jobPostionId) from `table_name` limit 1)

OR

DELETE FROM `table_name` WHERE jobPositonId IN (select max(jobPostionId) from `table_name` limit 1)
0 голосов
/ 07 июня 2012

Это работает:

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

Кроме того, что вы дважды заходите в базу данных, что-то не так с этой техникой?

...