Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQl、SQLServer和Oracle中的分层查询_Mysql_Sql Server_Oracle_Sql Server 2008_Hierarchy - Fatal编程技术网

MySQl、SQLServer和Oracle中的分层查询

MySQl、SQLServer和Oracle中的分层查询,mysql,sql-server,oracle,sql-server-2008,hierarchy,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中的查询(工作) SQLServer中的查询(不工作): 如何在S

我试图在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中的查询(工作)

SQLServer中的查询(不工作):

如何在SqlServer中实现这一点?CTE到底是如何工作的?同样的查询在MySQL中会是什么样子

编辑 从Oracle查询返回的预期结果为:

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

您的加入条件是
m.mno=q.mno
,而我认为您需要
m.empno=q.mno
“CTE到底是如何工作的”——您尝试过谷歌吗?递归CTE解释得很好。但是,用纯mysql的sql方言无法做到这一点
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
EMPNO   ENAME   MNO
7       LK      6
6       PL      3
3       BC      1
1       KS      (null)