<올바른 방법>
DELETE
FROM [테이블 이름]
WHERE [인덱스 등 고유 COLUMN 이름] NOT IN
(
SELECT [인덱스 등 고유 COLUMN 이름] FROM
(
SELECT [인덱스 등 고유 COLUMN 이름]
FROM [테이블 이름]
GROUP BY [중복 데이터가 있는 COLUMN 이름]
)
AS [인덱스 등 고유 COLUMN 이름]
);
<이건 예시>
DELETE
FROM table_name
WHERE idx NOT IN
(
SELECT idx FROM
(
SELECT idx
FROM table_name
GROUP BY name, psw, phone_number
)
AS idx
);
<잘못된 방법_1>
==> 이거 쓰면 모든 Data가 중복이든 아니든 각 1개씩 삭제됨. 쓰지 말자. --> [오류 출처 steemit yjiq]
DELETE
FROM [중복 제거할 Table Name]
WHERE [인덱스] IN
(
SELECT [인덱스] FROM
(SELECT [인덱스] FROM [중복 제거할 Table Name]
GROUP BY [중복 제거할 Column Name, 여러개 가능]
HAVING count(*) > 1)
temp_table
);
<이건 예시>
DELETE
FROM test_del
WHERE idx IN
(
SELECT idx FROM
(
SELECT idx FROM test_del
GROUP BY city_del, town_del
HAVING count(*) > 1
)
temp_table
);
==> 본디 Table 2개를 비교하여 중복 제거를 하지만, Single 이므로 temp_table 이란 임시 테이블을 넣어 Table 자신의 중복만 제거한다.
<잘못된 방법_2>
==> 이거 쓰면 MySQL 이 Deadlock 됨. 자칫 DB가 날아갈 수 있으니 쓰지 말자. --> [오류 출처 : 티스토리, 코딩하는 금융인]
DELETE t1 FROM contacts t1
JOIN contacts t2
ON t1.first_name=t2.first_name AND t1.last_name=t2.last_name AND t1.email=t2.email
WHERE t1.id > t2.id;
<참조 1> https://steemit.com/kr/@yjiq150/mysql
<참조 2> https://ellapresso.tistory.com/9
'Programing > DB' 카테고리의 다른 글
[MySQL] Event Scheduler (0) | 2022.11.29 |
---|---|
[MySQL] Alias (0) | 2022.11.25 |
[MySQL] Stored Procedure (0) | 2022.11.18 |
[DB] MySQL Table 구조 및 데이터 복사 (0) | 2022.11.16 |
댓글