MySQl与SQL Server和Oracle中的分层查询

时间:2015-02-15 22:05:07

标签: mysql sql-server oracle sql-server-2008 hierarchy

我正在尝试在oracle / mysql / sqlserver中实现Connect By查询以了解工作中的差异。试图了解它是如何工作的。所以我有一个简单的表,看起来像:

empno ename mno
1      KS    null
2      AB     2
3      BC     1
4      TR     3
5      QE     2
6      PL     3
7      LK     6

Oracle中的查询(正在运行)

SELECT empno, ename, mno
   FROM test
START WITH ename = 'LK'
   CONNECT BY  empno = PRIOR mno;

SQLServer中的查询(不工作):

WITH    q AS 
        (
        SELECT  *
        FROM    test
        WHERE   empno = 5
        UNION ALL
        SELECT  m.*
        FROM    test m
        JOIN    q
        ON      m.mno = q.mno
        )
SELECT  *
FROM    q

我如何在SqlServer中执行此操作? CTE如何正常工作?如何在MySQL中查询相同的查询?

修改

Oracle查询返回的预期结果是:

EMPNO   ENAME   MNO
7       LK      6
6       PL      3
3       BC      1
1       KS      (null)

SQLFiddle (for Oracle) here

1 个答案:

答案 0 :(得分:1)

当我认为您需要m.mno = q.mno时,您的加入条件为m.empno = q.mno