sql - 如何在没有联合的情况下使用sql递归?
问题描述
我有一个关于 sql 递归理论的问题。定义:如果一个公用表表达式在其定义中使用了自己,这称为递归。
FedEmp(name, salary, manager)
查找 Hoover 管理下的所有工资超过 100000 的员工
with agents(name, salary) as
((select name, salary --initial query
from FedEmp
where manager = ‘Hoover’)
union all
(select f.name, f.salary --recursive query
from agents as a, FedEmp As f
where f.manager = a.name))
select name from agents; --final query
解决方案
要进行递归, UNION ALL
没有其他方法,这是定义。
简要说明其背后的机制:
之前的第一部分
UNION ALL
用于“获取一组初始行”。之后的第二部分
UNION ALL
用于“根据上一次迭代中找到的内容添加更多行”。
第二部分继续执行,直到找不到要添加的新行(或直到达到 MAXRECURSION 限制;这是可配置的)。
另外,请参阅这个相关问题:为什么 Transact-SQL 中的递归 CTE 需要 UNION ALL 而不是 UNION?
要回答关于查找所有薪水超过 100000 的员工的第二部分,我认为WHERE salary > 100000
在最后添加就可以了。CTE 以递归方式查找人员,尚未查看薪水;然后你按薪水过滤它们。
推荐阅读
- opencv - 如何从源代码构建 opencv java 库?
- java - Android Studio 网购
- javascript - 带有参数的 jQuery GET 在服务器端始终为空
- python - 如何在没有 anaconda 的情况下在 python 中创建环境?
- swift - 重写 NSScrollView.scrollWheel(with:) 方法禁用垂直滚动
- python - 尝试通过 Python 3.6 中的 filedialog 中的按钮获取所选文件的完整路径
- python - 有没有办法在使用 Pygame 库的函数调用之后使用绘制矩形?按下按钮后
- php - tymondesigns/jwt-auth:如何创建过期令牌?
- python - 需要将 Spark 转换为 Python 以将 DF 复制到 Azure SQL Server
- reactjs - 警告:React.createElement:类型无效——需要一个字符串(对于内置组件)或一个类/函数