当前位置:   article > 正文

mysql8动态子查询;LATERAL_mysql lateral

mysql lateral

概述

我的mysql版本:8.0.32

mysql的子查询通常都是动态的
比如下面的子查询中的查询内容是不会随着a表的内容变化而变化的,在sql执行时其中的内容都是固定的.

select
	*
from
	a
	left join (
		select
			*
		from
			b
	) c
	on a.x = c.x
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

场景:
一张部门+用户+销量表,取每个部门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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

上一波官方文档
https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/761873
推荐阅读
相关标签
  

闽ICP备14008679号