我试图在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

最佳答案

你的加入条件是m.mno = q.mno,当我认为你想要m.empno = q.mno时。

08-07 09:46