Oracle 테이블에서 중복된 값을 찾으려면 어떻게 해야 합니까?
Oracle 데이터베이스 테이블에서 특정 열에 대한 중복 값과 발생 횟수를 반환하는 가장 간단한 SQL 문은 무엇입니까?
예를 들어 다음과 같습니다.나는 가지고 있다JOBS
기둥과 함께 있는 표JOB_NUMBER
중복된 항목이 있는지 확인하려면 어떻게 해야 합니까?JOB_NUMBER
s, 그리고 그것들은 몇 번이나 중복되는가?
COUNT별로 열을 집계한 다음 HAVING 절을 사용하여 여러 번 나타나는 값을 찾습니다.
SELECT column_name, COUNT(column_name)
FROM table_name
GROUP BY column_name
HAVING COUNT(column_name) > 1;
다른 방법:
SELECT *
FROM TABLE A
WHERE EXISTS (
SELECT 1 FROM TABLE
WHERE COLUMN_NAME = A.COLUMN_NAME
AND ROWID < A.ROWID
)
인덱스가 켜져 있는 경우 정상 작동(충분히 빠름)column_name
중복 행을 삭제하거나 업데이트하는 것이 좋습니다.
내가 생각할 수 있는 가장 간단한 것:
select job_number, count(*)
from jobs
group by job_number
having count(*) > 1;
예를 들어, 실제 중복 수를 알 필요가 없는 경우 반환되는 열에 개수를 입력할 필요도 없습니다.
SELECT column_name
FROM table
GROUP BY column_name
HAVING COUNT(*) > 1
그럼 어떻게 해?
SELECT <column>, count(*)
FROM <table>
GROUP BY <column> HAVING COUNT(*) > 1;
위의 예에 대한 답변은 다음과 같습니다.
SELECT job_number, count(*)
FROM jobs
GROUP BY job_number HAVING COUNT(*) > 1;
여러 열이 고유한 행(예: 관계 테이블)을 식별하는 경우 다음을 사용할 수 있습니다.
행 ID(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);
이러한 테이블에 기본 키가 있는 경우 rowid 대신 기본 키를 사용합니다(예: id는 pk).
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);
하고있다
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를 제공합니다.
SELECT SocialSecurity_Number, Count(*) no_of_rows
FROM SocialSecurity
GROUP BY SocialSecurity_Number
HAVING Count(*) > 1
Order by Count(*) desc
Oracle Analytic 함수 ROW_NUMBER()를 주로 사용합니다.
열에 내장된 고유 인덱스 또는 기본 키에 대해 중복된 항목을 확인한다고 가정합니다.c1
,c2
,c3
그런 다음 이 방향으로 이동하여 에서 가져온 행의 수를 표시합니다.ROW_NUMBER()
이>1
:
Select *
From Table_With_Duplicates
Where Rowid In (Select Rowid
From (Select ROW_NUMBER() Over (
Partition By c1, c2, c3
Order By c1, c2, c3
) nbLines
From Table_With_Duplicates) t2
Where nbLines > 1)
오래된 실타래라는 건 알지만 이게 도움이 될 수도 있어.
아래 중복 사용을 확인하는 동안 표의 다른 열을 인쇄해야 하는 경우:
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 구에 필터를 추가할 수도 있습니다.
이를 위한 SQL 요청은 다음과 같습니다.
select column_name, count(1)
from table
group by column_name
having count (column_name) > 1;
1. 해결방법
select * from emp
where rowid not in
(select max(rowid) from emp group by empno);
또한 이와 같은 방법으로 테이블에 중복되는 모든 값을 나열할 수 있습니다. 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;
언급URL : https://stackoverflow.com/questions/59232/how-do-i-find-duplicate-values-in-a-table-in-oracle
'programing' 카테고리의 다른 글
RegExp의 시리얼화 (0) | 2023.02.11 |
---|---|
이동 시 JSON Post Request 처리 (0) | 2023.02.11 |
데이터가 도착하기 전에 ng-src가 이미지를 로드하지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.02.11 |
Angularjs: 명령어에 스코프 변수를 전달하려면 어떻게 해야 합니까? (0) | 2023.02.11 |
사용자 지정 css 클래스를 WooCommerce 체크아웃 필드에 추가합니다. (0) | 2023.02.11 |