sql - 在分层 sql 中查找重复/重复的行

标签 sql oracle hierarchical-data

我正在尝试检测分层表中的重复/重复值。

考虑以下(稍微做作的)示例:

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/

相关文章:

sql - FOR XML 无法序列化 char(0x0000),即使已包含 REPLACE 函数来替换 Char(0x0000)

c++ - C/C++ 应用程序中嵌入式 SQL 数据库的 PostgreSQL 替代品

java - 如何优化这个SQL删除

父子关系的 SQL 查询

mysql - 添加外键时出现问题

mysql - 在子查询中使用 And 运算符

mysql - 自引用表,单个查询中的父/子插入语句

sql-server - 数据库设计帮助——分层数据

sql - Oracle 相当于 T-SQL SET @var = @var + ' ' ;

sqlplus,以1列导出查询,并且是无序的