SQL递归查询的实现与应用:详解SQL中WITH RECURSIVE的用法

SQL如何实现递归查询_SQL递归查询的实现方法

哦我的朋友关于SQL递归查询;我经历过很多恐怖。
2 01 6 年,我记得帮助一家公司回答员工层面的问题。
当时我还在使用MySQL 5 .7 当时的数据库操作真的很考验我的耐心。

就在那时我开始研究这个递归查询。
一开始我以为很简单,结果我写的SQL语句总是出问题。
锚定成员和递归成员;我当时并不能真正理解这两个概念。
锚定件就像反弹的起点。
我当时认为向鲍勃发起询问会很简单。
结果我写了anchor成员,也写了recursive成员结果没有数据。

后来我向公司前程序员请教,他说主播一定要把康复的起点写清楚。
例如,Bob的EmployeeID是2 ;那么必须从EmployeeID=2 开始。
递归成员应该清楚地描述如何加入,例如通过ManagerID搜索下属。
这次我明白了,于是我又写了一遍,终于信息出来了。

但是问题又来了。
数据发布后,层次混乱、无序。
反复我当时发现查询并不能保证输出顺序;因此,您必须在外部查询中添加 ORDER BY。
这又是我那次差点掉进的另一个陷阱。

在性能优化方面,那段时间我遇到了很多不足。
有一次,我记得数据库崩溃了,因为查询层次太深,数据量巨大。
后来我发现我们需要限制迭代深度以避免不必要的计算。
此外,您可以通过使用 UNION ALL 而不是 UNION 来提高性能。

最后,不同数据库的实现差异让我很头疼。
例如,Oracle的CONNECTION与MySQL的RECURSIVE完全不同。
这需要时间来研究。

现在回想起来,那段时期真的很艰难。
但通过这些经历我学到了很多。
重复的问题有点混乱,但是当你学会它的时候。
这将使处理分层数据变得更加容易。

如何使用 MySQL 查询特定部门及其所有下属部门的用户?

直接给出方案。

WITHRECURSIVEdept_treeAS( SELECTdept_idFROMsys_departmentWHEREdept_id=[目标部门 ID] 优联 SELECTd.dept_idFROMsys_departmentdJOINdept_treedtONd.parent_id=dt.dept_id ) SELECTDISTINCTu.FROMsys_useruJOINsys_user_deptudONu.id=ud.user_idWHEREud.dept_idIN(SELECTdept_idFROMdept_tree);
索引已添加到dept_id和parent_id。

请检查[目标服务ID]并将其替换为特定数字。