我正在尝试检测分层表中的重复/重复值。
考虑以下(稍微做作的)示例:
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 中执行此操作。
如果需要澄清,请告诉我。
谢谢 :-)
编辑:
请注意,子查询可能返回 0...N 个值。
最佳答案
试试这个..
SELECT EMPNO,ENAME FROM,count(*)as counts emp group by EMPNO,ENAME having count(*)>1
关于sql - 在分层 sql 中查找重复/重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127904/