首页 > 解决方案 > MySQL 中不允许子查询限制,但我需要“它”

问题描述

首先是 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 子句中限制但在子子查询中允许,例如在最初的“选择食物...”之外添加“选择 * 从”可以解决限制。说真的,我不知道为什么,但我测试了一下,没关系。

标签: mysqlsubquerylimit

解决方案


首先你应该在 in 子句之后删除 t1

  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

推荐阅读