mysql - 如何将子查询替换为连接查询
问题描述
我正在使用这个查询
select t.task_id,td.task_detail_id ,
(SELECT COUNT(1) FROM task_detail tdd where tdd.task_id=t.task_id and
tdd.status='ACTIVE' ) as total
from task t inner join task_detail td on td.task_id=t.task_id
where td.task_id=t.task_id and td.status='ACTIVE' ;
查询正在以预期结果运行,但我想将total column
子查询更改为联接。
解决方案
在 MySQL 8+ 中,您将使用窗口函数
select t.task_id, td.task_detail_id,
count(*) over (partition by t.task_id) as total
from task t inner join
task_detail td
on td.task_id = t.task_id
where td.status = 'ACTIVE' ;
在早期版本中,建议使用子查询,但您可以将其移至from
子句:
select t.task_id, td.task_detail_id,
td2.total
from task t inner join
task_detail td
on td.task_id = t.task_id join
(select count(*) as total
from task_detail td2
where td2.status = 'ACTIVE'
group by td2.task_id
) td2
on td2.task_id = td.task_id
where td.status = 'ACTIVE' ;
推荐阅读
- python-3.x - 我们如何在 jupyter lab 中配置默认导入我已经在 jupyter notebook 中完成了这项工作,但它在 jupyter lab notebook 中失败
- mongodb - MongoDB按数组中的指定元素对文档进行排序
- xml - 使用 Zeep 问题的工作日 SOAP API
- python - 为什么我们在所有类方法上都传递 self ?
- excel - 有没有办法根据另一列中的一个单元格扫描整列并提取相应列的值?
- python - 如何在python的多个方法中使用var
- regex - 正则表达式:从字符串末尾开始匹配模式
- r - 对 glmer 模型的估计进行计算并在图中使用结果
- android - Android 多行纯文本背景
- html - 动画导航适用于桌面,但不适用于移动 IOS