Иерархический запрос в MySQl против SQLServer против Oracle

Я пытаюсь реализовать запрос Connect By в oracle/mysql/sqlserver, чтобы понять разницу в работе. Пытаюсь понять, как это работает. Итак, у меня есть простая таблица, которая выглядит так:

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 (для Oracle) здесь


person rkbom9    schedule 15.02.2015    source источник
comment
Как именно работает CTE --- пробовали ли вы гуглить? Рекурсивные CTE довольно хорошо объяснены. Вы не можете сделать это на чистом диалекте sql mysql, хотя   -  person zerkms    schedule 16.02.2015


Ответы (1)


Ваше условие присоединения m.mno = q.mno, когда я думаю, что вы хотите m.empno = q.mno.

person Dave Costa    schedule 15.02.2015