赞
踩
我的mysql
版本:8.0.32
mysql
的子查询通常都是动态的
比如下面的子查询中的查询内容是不会随着a
表的内容变化而变化的,在sql
执行时其中的内容都是固定的.
select
*
from
a
left join (
select
*
from
b
) c
on a.x = c.x
场景:
一张部门+用户+销量表,取每个部门top5销量的用户,
mysql8
之前都是用变量排序然后筛选一波
mysql8
之后一般都是用窗口函数分组排序后筛选一波
mysql8
之后其实还可以用LATERAL
实现动态子查询
比如下面通过动态筛选子查询中的内容,在子查询中查出每个部门的前5销量的数据,然后再外面用部门关联查询
select * from department d inner join LATERAL ( select * from sales where d.dpt_id = dpt_id order by sales_num desc limit 5 ) b # join on的条件不一定要和LATERAL动态查询的条件一样 on d.dpt_id = b.dpt_id
上一波官方文档
https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。