首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

简化 SQL 递归查询

背景描述

自引用类型的表结构处理起来比较麻烦,比如“分类”表,通常包括自己的ID和父分类ID,当我们要做父分类路径、子分类路径之类的查询时很不方便,例如我们会使用嵌套查询,或者添加冗余字段来记录分类路径信息,都比较麻烦,有没有简单的办法呢?

解决方法就是使用CTE(Common Table Expression),通用表表达式。

下面我们先认识一下CTE,然后通过几个实际查询示例来深入理解,最后会提供测试数据,以方便自己动手实践(在mysql8和postgres10上都测试过)。

什么是 CTE?

各大主流数据库都支持CTE,mysql8 中也支持了。

简单理解,CTE 就是一个有名字的结果集,就像一个普通表一样,可以被用在 select 语句中。

CTE 有循环非循环形式,非循环形式比较简单,就像一个命了名的子查询,例如:

循环形式的复杂一点,先看一个示例:

(1)示例1

查询 “Child A1” 这个分类及其子分类,并显示层级深度。

分析:

第一个select得到结果数据 和 基础上计算

和 的2个子分类 ,还有 和 查找,找到了 。

第二个 select 继续执行,发现结果集为空了,停止。

测试环境准备

建表:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181012B0NIFY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券