Я пытаюсь обнаружить дублированные/повторяющиеся значения в иерархической таблице.Найти повторяющиеся/повторяющиеся строки в иерархическом sql
Рассмотрим следующий (немного надуманный) пример:
SELECT *
FROM emp
START WITH mgr IN (SELECT empno FROM emp WHERE ename = 'JONES'
UNION ALL
SELECT empno FROM emp WHERE ename = 'JONES')
CONNECT BY PRIOR empno = mgr;
Возвраты ...
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
То, что я на самом деле хочу ...
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
т.е. я хочу каждый строка должна быть возвращена столько раз, сколько она существует в подзапросе (игнорируя порядок). Поскольку START WITH использует предложение IN, повторяющиеся значения подавляются. Возможно ли реорганизовать SQL, чтобы я мог это сделать?
Обратите внимание, что в моем случае подпункт не является UNION, а является SELECT, который может возвращать несколько (возможно повторяющихся) значений из таблицы.
Я мог бы сделать это в PL/SQL, записав значения в таблицу temp, а затем GROUPING + COUNTING, но я бы предпочел сделать это только в SQL, если это возможно.
Дайте мне знать, если требуются какие-либо разъяснения.
Спасибо :-)
EDIT:
Обратите внимание, что там может быть 0 ... N возвращаемые значения из подзапроса.
СОЮЗ ALL не помогает .... повторяющиеся значения surpressed при оценке IN. – cagcowboy