【问题标题】:Convert Oracle CONNECT BY query to SQL Server query将 Oracle CONNECT BY 查询转换为 SQL Server 查询
【发布时间】:2021-06-05 21:47:34
【问题描述】:

如何将此 Oracle 代码结构转换为 SQL Server:

SELECT LEVEL, EMPNO, ENAME, JOB, MGR FROM EMP
CONNECT BY MGR = PRIOR EMPNO
START WITH MGR IS NULL
ORDER BY LEVEL;

【问题讨论】:

  • 是sql server还是mysql?

标签: sql sql-server oracle


【解决方案1】:

SQL Server 没有CONNECT BY。您需要使用递归 CTE。

START WITH 放在锚部分(CTE 的第一部分)的WHERE 过滤器中。

在递归部分(后半部分),使用 CONNECT BY 条件将 CTE 重新加入到 EMP

WITH cte AS (
    SELECT
        LEVEL = 1,
        e.EMPNO,
        e.ENAME,
        e.JOB,
        e.MGR
    FROM EMP e
    WHERE e.MGR IS NULL

    UNION ALL

    SELECT
        cte.LEVEL + 1,
        e.EMPNO,
        e.ENAME,
        e.JOB,
        e.MGR
    FROM EMP e
    JOIN cte ON e.MGR = cte.EMPNO
)

SELECT
    cte.LEVEL,
    cte.EMPNO,
    cte.ENAME,
    cte.JOB,
    cte.MGR
FROM cte
ORDER BY cte.LEVEL;

【讨论】:

  • 是他们不使用 cte 的一种方式,只使用简单的子句,例如 ( where,select,joint,union,group by,have )??
  • 不,CONNECT BY 本质上是递归的。我想你可以做一个WHILE 循环,但这不太可能更容易或更高效
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
相关资源
最近更新 更多