Сначала SQL =
delete
from eat_history
where food in
( select food
from eat_history
where name ='minicake'
and cream='yes'
order
by eat_time desc
limit 1
) t1
Я намерен удалить съеденную еду последний с названием 'minicake' и cream = 'yes' (может быть несколько предметов). MySQL не позволяет этого, как я указываю в заголовке. Однако в моем случае решающим моментом является «предел 1». Есть ли хороший обходной путь, лучше всего использовать один оператор SQL?
=====
Обновлено: Я нахожу ответ в другом вопросе, что, хотя MySQL не разрешает ограничение в предложении IN, но разрешено в подзапросе, например. добавить «выбрать * из» снаружи изначально «выбрать еду ...» можно обойти ограничение. Серьезно, я не знаю почему, но я тестирую, все в порядке.
Это похоже на обман. Ты съел торт. По крайней мере, признай это.






Сначала вы должны удалить t1 после предложения in
delete from eat_history where food in (
select food from eat_history where name='minicake' and cream='yes'
order by eat_time DESC limit 1
)
но вы можете избежать ограничения, используя группу путем объединения
delete from eat_history e
inner join (
select food, max(eat_time) max_time
from eat_history
where name='minicake' and cream='yes'
group by foo
) t on t.food = e.food and t.max_time = e.eat_time
в предыдущем запросе, который вы отправили, вы пропустили режим заказа DESC / ASC
@Dickson в первом порядке такой же, как в OP, а во втором - выберите только одну запись и не нуждаетесь в порядке
Я согласен, однако, с первым запросом без порядка сортировки MySQL будет сортировать в возрастающем порядке, поэтому вместо выбора последней записи он выберет первую, а затем удалит первую запись вместо последней / самой последней записи. . Видно, вы поправили. Ура, чувак
@Dickson .. правильно .. ответ обновлен .. хороший момент .. где-то проголосовали .. спасибо
@scaisEdge Сначала извините за отсутствие "desc", я изменил вопрос. Во-вторых, как я указываю в заголовке, ваш первый SQL также получит ошибку «Эта версия MySQL еще не поддерживает подзапрос LIMIT & IN / ALL / ANY / SOME». Я нашел ответ в другом вопросе, который решает эту проблему (напишу под вопросом). Однако ваш второй SQL - это еще один способ обойти это. Спасибо за ответ, и я проголосую за него.
Здесь вам не нужен подзапрос. Переместите предложения where и limit в основной запрос.