gpt4 book ai didi

sql-server - SQL Server中模拟Oracle的CONNECT BY PRIOR

转载 作者:行者123 更新时间:2023-12-01 18:18:35 25 4
gpt4 key购买 nike

如何在SQL Server 2000/2005/2008中获得Oracle的CONNECT BY PRIOR功能?

最佳答案

实现递归查询的 SQL 标准方法,例如实现的由 IBM DB2 和 SQL Server ,是 WITH 子句。请参阅this article例如,将 CONNECT BY 转换为 WITH(技术上是递归 CTE)——该示例适用于 DB2,但我相信它会也可以在 SQL Server 上工作。

编辑:显然原始查询者需要一个特定的示例,这是来自 IBM 站点的一个示例,我已经给出了该站点的 URL。给定一个表:

CREATE TABLE emp(empid  INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(10),
salary DECIMAL(9, 2),
mgrid INTEGER);

其中 mgrid 引用员工经理的 empid,任务是获取直接或间接向 Joan 汇报的每个人的姓名。在 Oracle 中,这是一个简单的 CONNECT:

SELECT name 
FROM emp
START WITH name = 'Joan'
CONNECT BY PRIOR empid = mgrid

在 SQL Server、IBM DB2 或 PostgreSQL 8.4(以及 SQL 标准,无论其值(value)如何;-)中,完全等效的解决方案是递归查询(语法更复杂,但实际上更复杂)强大的功能和灵 active ):

WITH n(empid, name) AS 
(SELECT empid, name
FROM emp
WHERE name = 'Joan'
UNION ALL
SELECT nplus1.empid, nplus1.name
FROM emp as nplus1, n
WHERE n.empid = nplus1.mgrid)
SELECT name FROM n

Oracle 的 START WITH 子句成为第一个嵌套的 SELECT(递归的基本情况),与递归部分进行 UNION 结合,其中只是另一个SELECT

SQL Server 的特定风格 WITH 当然记录在 MSDN 上。 ,其中还提供了使用此关键字的指南和限制,以及几个示例。

关于sql-server - SQL Server中模拟Oracle的CONNECT BY PRIOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com