階層テーブル内で重複/重複値を検出しようとしています。階層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であることに注意してください。
値をテンポラリ・テーブルに書き込み、GROUPing + COUNTingすることでPL/SQLで実行できますが、可能な場合にのみSQLで実行します。
明確化が必要な場合はお知らせください。
EDIT :-)
ありがとう:0が存在する可能性があること
注... N値は、サブクエリから返されました。
連合ALLは役立ちませんが....繰り返される値は、INの評価中にsurpressedされています。 – cagcowboy