12.30
1. WITH RECURSIVE:递归查询,适用于树形/层级数据(如部门架构、分类目录),日常业务中使用频次低,仅处理层级场景时用到。
sql
-- 递归查所有子部门(id=1为根部门)
WITH RECURSIVE dept_cte AS (
SELECT id, name, parent_id FROM dept WHERE id=1
UNION ALL
SELECT d.id, d.name, d.parent_id FROM dept d
JOIN dept_cte c ON d.parent_id = c.id
)
SELECT * FROM dept_cte;
2. LATERAL JOIN:关联子查询可引用主表字段,解决常规JOIN无法关联主表列的问题,适配多列关联匹配场景,实用性强但使用率低。
sql
-- 查每个用户最新的2条订单
SELECT u.name, o.order_no, o.create_time
FROM user u
LEFT JOIN LATERAL (
SELECT order_no, create_time FROM order
WHERE user_id = u.id ORDER BY create_time DESC LIMIT 2
) o ON true;
3. GROUPING SETS:灵活多维度聚合,替代多次UNION合并聚合结果,简化多维度统计代码,比ROLLUP/CUBE更灵活且使用更少。
sql
-- 同时按地区、品类、整体聚合销量
SELECT area, category, SUM(sales) total_sales
FROM goods_sales
GROUP BY GROUPING SETS (area, category, ());

浙公网安备 33010602011771号