Tôi đang cố gắng phát hiện các giá trị trùng lặp/lặp lại trong bảng phân cấp.Tìm hàng trùng lặp/lặp lại trong phân cấp sql
xem xét như sau (hơi giả tạo) ví dụ:
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
Những gì tôi thực sự muốn là ...
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
tức là tôi muốn mỗi hàng được trả về nhiều lần khi nó tồn tại trong truy vấn phụ (bỏ qua thứ tự). Vì START WITH đang sử dụng mệnh đề IN, các giá trị lặp lại đang bị loại bỏ. Có thể tổ chức lại SQL để tôi có thể làm điều này không?
Lưu ý rằng trong trường hợp của tôi mệnh đề phụ không phải là một UNION, nhưng là một SELECT có thể trả về nhiều giá trị (có thể trùng lặp) từ một bảng.
Tôi có thể làm điều đó trong PL/SQL bằng cách viết các giá trị vào bảng tạm thời và sau đó GROUPing + COUNTing, nhưng tôi muốn làm điều đó trong SQL chỉ khi có thể.
Hãy cho tôi biết nếu cần làm rõ.
Cảm ơn :-)
EDIT:
Lưu ý rằng có thể có 0 ... N giá trị trở về từ các tiểu truy vấn.
Các UNION ALL không giúp .... các giá trị lặp đi lặp lại được surpressed trong việc thẩm định IN. – cagcowboy