중복 데이터 확인
셀프 조인을 통해 중복된 행의 id값을 확인하는 방법이다.
id가 제일 작은 값으로 사용한다.
근데 아래와 같은 명령어를 사용하면 데이터가 중복되어 좀 더 많이 보이는 현상이 있긴하다.
schemas 에 본인이 사용하는 스키마 이름
tablename 에는 테이블 명을 입력해준다.
select s1.*
from schemas.tablename s1 join schemas.tablename s2
on s1.title = s2.title and s1.link = s2.link
where s1.id > s2.id;
중복 데이터 삭제하기
sql문으로 데이터 삭제하기에 대해 검색하면
row_number 를 사용해 partition by로 중복된 컬럼을 지정하고 row_num>1 을 설정해
삭제할 데이터만 가져오는 방법에 대해 많이 나와있다.
아래와 같은 방법을 사용할 수도 있다.
명령어를 수행하기 전에 select 문으로 확인해보고 delete문을 사용하길 추천한다.
-- SELECT * schemas.tablename
DELETE FROM schemas.tablename
WHERE id IN
(SELECT id
FROM (
SELECT id, ROW_NUMBER() OVER (PARTITION BY title, link) as row_num
FROM schemas.tablename
) tmp
WHERE row_num > 1);
나는 좀 더 짧은 명령어를 사용해 삭제하고 싶었다.
그래서 아래와 같이 delete 와 using 을 사용했다.
--select *
--from schemas.tablename s1, schemas.tablename s2
delete from schemas.tablename s1
using schemas.tablename s2
where s1.title = s2.title and s1.link = s2.link and s1.id > s2.id;
나는 개인적으로 밑에 방법이 더 좋은것 같다.
추가로 공식 홈페이지에서 delete에 대한 설명을 확인할 수 있다.
https://www.postgresql.org/docs/current/sql-delete.html
반응형
'백엔드 > DB' 카테고리의 다른 글
[mysql] Failed to determine a suitable driver class (0) | 2022.11.08 |
---|---|
MySQL EXPLAIN 실행 계획 보기 (쿼리 최적화 하기) (0) | 2022.08.19 |
postgresql 한글 포함 여부 확인하기 (0) | 2022.04.07 |
postgresql log 확인하기 (0) | 2022.04.06 |
DBeaver 에서 DB 데이터 내보내기 (0) | 2022.04.06 |