mysql - 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 子句中限制但在子子查询中允许,例如在最初的“选择食物...”之外添加“选择 * 从”可以解决限制。说真的,我不知道为什么,但我测试了一下,没关系。
解决方案
首先你应该在 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
推荐阅读
- c++ - 如何从qt中的另一个类调用函数?
- r - Cairo 无法在 Mac 上的 RStudio 中加载
- python - Django 应用程序适用于本地主机,但不适用于 Heroku
- api - 使用 Flutter 将带有图像的数据发送(发布)到 RestFull API
- docker - 在生产模式下,phpmyadmin 在由 Ngnix 提供服务时找不到静态文件
- r - 在 statnet 中绘制带有 GPS 坐标的网络
- php - phpspreadsheet 中的 INDEX 函数
- .net - 如何使用 TFS 2015 / VS 2017 将通用测试与测试用例相关联?
- entity-framework - 试图返回最大日期
- javascript - 将数组转换为子数组的数组