Sto tentando di rilevare valori duplicati/ripetuti all'interno di una tabella gerarchica.Trova righe duplicate/ripetute in sql gerarchico
Si consideri il seguente (un po 'forzata) Esempio:
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;
Returns ...
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
Quello che in realtà voglio è ...
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
cioè io voglio ogni riga da restituire tutte le volte che esiste nella sotto-query (ignorando l'ordine). Poiché START WITH utilizza una clausola IN, i valori ripetuti vengono eliminati. È possibile riorganizzare l'SQL in modo che io possa farlo?
Si noti che nel mio caso la sotto-clausola non è UNION, ma è una SELECT che può restituire più valori (possibilmente duplicati) da una tabella.
Potrei farlo in PL/SQL scrivendo i valori in una tabella temporanea e poi GROUPing + COUNTing, ma preferirei farlo in SQL solo se possibile.
Fatemi sapere se è richiesto qualche chiarimento.
Grazie :-)
EDIT:
Nota che ci possono essere 0 ... N valori restituiti dal sub-query.
L'UNION ALL non aiuta .... i valori ripetuti sono surpressed durante la valutazione del IN. – cagcowboy