복붙노트

[SQL] 어떻게 오라클의 테이블에서 중복 값을 찾을 수 있습니까?

SQL

어떻게 오라클의 테이블에서 중복 값을 찾을 수 있습니까?

주어진 열 및 Oracle 데이터베이스 테이블에서의 발생의 수에 대한 중복 값을 반환합니다 간단한 SQL 문은 무엇입니까?

예를 들면 : 나는 열 JOB_NUMBER와 JOBS 테이블이있다. 어떻게 중복 JOB_NUMBERs이있는 경우 내가 찾을 수 있습니다, 그리고 그들은 얼마나 많은 시간을 중복거야?

해결법

  1. ==============================

    1.

    SELECT column_name, COUNT(column_name)
    FROM table_name
    GROUP BY column_name
    HAVING COUNT(column_name) > 1;
    
  2. ==============================

    2.또 다른 방법:

    또 다른 방법:

    SELECT *
    FROM TABLE A
    WHERE EXISTS (
      SELECT 1 FROM TABLE
      WHERE COLUMN_NAME = A.COLUMN_NAME
      AND ROWID < A.ROWID
    )
    

    작품 벌금 (빠른 충분) 때 COLUMN_NAME 인덱스가있다. 그리고 삭제하거나 중복 행을 업데이트하는 더 좋은 방법입니다.

  3. ==============================

    3.내가 생각할 수있는 가장 간단한 :

    내가 생각할 수있는 가장 간단한 :

    select job_number, count(*)
    from jobs
    group by job_number
    having count(*) > 1;
    
  4. ==============================

    4.당신은 당신이 중복의 실제 번호를 알 필요가없는 경우에도 반환 된 열의 수를 할 필요가 없습니다. 예를 들면

    당신은 당신이 중복의 실제 번호를 알 필요가없는 경우에도 반환 된 열의 수를 할 필요가 없습니다. 예를 들면

    SELECT column_name
    FROM table
    GROUP BY column_name
    HAVING COUNT(*) > 1
    
  5. ==============================

    5.방법에 대해 :

    방법에 대해 :

    SELECT <column>, count(*)
    FROM <table>
    GROUP BY <column> HAVING COUNT(*) > 1;
    

    위의 예에 대답하기 위해서는 같을 것이다 :

    SELECT job_number, count(*)
    FROM jobs
    GROUP BY job_number HAVING COUNT(*) > 1;
    
  6. ==============================

    6.경우 여러 열은 다음이 사용할 수있는 고유 한 행 (예를 들어, 관계 표)를 식별 곳

    경우 여러 열은 다음이 사용할 수있는 고유 한 행 (예를 들어, 관계 표)를 식별 곳

    사용 행 ID   예를 들면 emp_dept (EMPID, deptid, STARTDATE, ENDDATE)    EMPID 및 deptid있는 독특한 가정하고 그 경우에 행을 식별

    select oed.empid, count(oed.empid) 
    from emp_dept oed 
    where exists ( select * 
                   from  emp_dept ied 
                    where oed.rowid <> ied.rowid and 
                           ied.empid = oed.empid and 
                          ied.deptid = oed.deptid )  
            group by oed.empid having count(oed.empid) > 1 order by count(oed.empid);
    

    같은 테이블에 기본 키가있는 경우 다음 ID가 다음 PK입니다 예컨대 대신 ROWID의 기본 키를 사용

    select oed.empid, count(oed.empid) 
    from emp_dept oed 
    where exists ( select * 
                   from  emp_dept ied 
                    where oed.id <> ied.id and 
                           ied.empid = oed.empid and 
                          ied.deptid = oed.deptid )  
            group by oed.empid having count(oed.empid) > 1 order by count(oed.empid);
    
  7. ==============================

    7.하기

    하기

    select count(j1.job_number), j1.job_number, j1.id, j2.id
    from   jobs j1 join jobs j2 on (j1.job_numer = j2.job_number)
    where  j1.id != j2.id
    group by j1.job_number
    

    당신에게 중복 된 행 'ID를 제공 할 것입니다.

  8. ==============================

    8.

    SELECT   SocialSecurity_Number, Count(*) no_of_rows
    FROM     SocialSecurity 
    GROUP BY SocialSecurity_Number
    HAVING   Count(*) > 1
    Order by Count(*) desc 
    
  9. ==============================

    9.나는 보통 오라클 분석 함수 ROW_NUMBER ()를 사용합니다.

    나는 보통 오라클 분석 함수 ROW_NUMBER ()를 사용합니다.

    당신이 고유 인덱스 또는 열을 기반으로 기본 키 (C1, C2, C3)에 관한 한 당신 중복을 확인하고 싶은 말은. 그럼 당신은 ROWID의 ROW_NUMBER ()로 가져온 라인의 수> 1 행의 양육이 길을 갈 것입니다 :

    Select * From Table_With_Duplicates
          Where Rowid In
                        (Select Rowid
                           From (Select Rowid,
                                        ROW_NUMBER() Over (
                                                Partition By c1 || c2 || c3
                                                Order By c1 || c2 || c3
                                            ) nbLines
                                   From Table_With_Duplicates) t2
                          Where nbLines > 1)
    
  10. ==============================

    10.여기에 그렇게 할 수있는 SQL 요청은 다음과 같습니다

    여기에 그렇게 할 수있는 SQL 요청은 다음과 같습니다

    select column_name, count(1)
    from table
    group by column_name
    having count (column_name) > 1;
    
  11. ==============================

    11.나는 그것의 오래된 스레드를 알고 있지만이 어떤 일을하는 데 도움이 될 수 있습니다.

    나는 그것의 오래된 스레드를 알고 있지만이 어떤 일을하는 데 도움이 될 수 있습니다.

    아래 중복 사용을 확인하는 동안 테이블의 다른 열을 인쇄해야하는 경우 :

    select * from table where column_name in
    (select ing.column_name from table ing group by ing.column_name having count(*) > 1)
    order by column_name desc;
    

    필요한 경우 또한 WHERE 절에 몇 가지 추가 필터를 추가 할 수 있습니다.

  12. ==============================

    12.1. 솔루션

    1. 솔루션

    select * from emp
        where rowid not in
        (select max(rowid) from emp group by empno);
    
  13. ==============================

    13.또한 u는 테이블 말의 reqitem의 모든 중복 값을 나열이 뭔가를 시도 할 수 있습니다

    또한 u는 테이블 말의 reqitem의 모든 중복 값을 나열이 뭔가를 시도 할 수 있습니다

    SELECT count(poid) 
    FROM poitem 
    WHERE poid = 50 
    AND rownum < any (SELECT count(*)  FROM poitem WHERE poid = 50) 
    GROUP BY poid 
    MINUS
    SELECT count(poid) 
    FROM poitem 
    WHERE poid in (50)
    GROUP BY poid 
    HAVING count(poid) > 1;
    
  14. from https://stackoverflow.com/questions/59232/how-do-i-find-duplicate-values-in-a-table-in-oracle by cc-by-sa and MIT license