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

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

Я пробовал

WHERE jobPositonId = max(jobPostionId)

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

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

11
01 сент. '10 в 21:27
источник

Связанные вопросы


Похожие вопросы

DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1
14
01 сент. '10 в 22:20
источник
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)
1
01 сент. '10 в 21:28
источник

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

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

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

0
07 июня '12 в 19:03
источник

Посмотрите другие вопросы по меткам или Задайте вопрос