ограничение в подзапросе не разрешено в MySQL, но мне нужно "это" - PullRequest
0 голосов
/ 17 мая 2018

Сначала 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

Мое намерение состоит в том, чтобы удалить самую последнюю съеденную еду с именем «миника» и кремом = «да» (может быть несколько элементов),MySQL не позволяет этого, как я отмечаю в заголовке.Однако в моем случае " limit 1 " является решающим моментом.Есть хороший обходной путь, лучше всего один оператор SQL?

=====

РЕДАКТИРОВАТЬ: я нашел ответ в другом вопросе, что, хотя MySQL не разрешает ограничение в предложении INно это разрешено в подзапросе, например, добавление «select * from» снаружи «select food ...» может обойти ограничение.Серьезно, я не знаю почему, но я проверяю это, все в порядке.

1 Ответ

0 голосов
/ 17 мая 2018

Во-первых, вы должны удалить 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
...