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