当前在线人数17546
首页 - 分类讨论区 - 电脑网络 - 数据库版 -阅读文章
未名交友
[更多]
[更多]
文章阅读:Re: SQL recursive CTE
[同主题阅读] [版面: 数据库] [作者:TheMatrix] , 2019年01月02日16:02:22
TheMatrix
进入未名形象秀
我的博客
[上篇] [下篇] [同主题上篇] [同主题下篇]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: SQL recursive CTE
发信站: BBS 未名空间站 (Wed Jan  2 16:02:22 2019, 美东)

SQL query是挺有意思的,它有点functional programming的意思。为什么这么说呢?
因为一个query它首先要构造rowset,有了rowset,再做各种各样的变换,一次可以变
一点点,记为一个CTE,然后把这些一点点的变换串联起来,形成一个复杂的变换。这
正是functional programming的精髓。

然而SQL缺少现场定义的aggregate function的功能。如果用map-reduce来类比的话,
SQL相当于map的功能,它缺少reduce的功能,也就是把一个rowset塌缩为一个数据的功
能。另外反过来看,SQL也缺少现场定义explode函数的功能,也就是把一个比如字符串
数据膨胀为一个rowset的功能。

recursive CTE相当于有了循环,应该可以现场实现所有的reduce或explode的功能。

现场,我的意思是指,在同一个(复合)query中实现。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 这几天仔细想了一下recursive CTE (SQL Server),觉得recursive CTE其实不是
: programming意义上的recursive,实际上就是一个loop,while loop或者for loop。
: 从recursive CTE的结构上看也是这样:它必须有三个部分:初始query,union all 增
: 长query,还要有结束条件。结束条件就是增长部分不再增长了,就是结束了。这完全
: 对应了while loop或者for loop的结构。另外“union all”是结构中必须有的关键字
: ,它没有其他结构。
: 想了两个基本用例,觉得还是蛮有意思的。又不能贴代码了,只能贴两个图。




--
☆ 发自 iPhone 买买提 1.24.09
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:9839:]

[上篇] [下篇] [同主题上篇] [同主题下篇]
[转寄] [转贴] [回信给作者] [修改文章] [删除文章] [同主题阅读] [从此处展开] [返回版面] [快速返回] [收藏] [举报]
 
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996