Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블에서 역방향으로 저장된 중복 값 삭제하는 방법

역방향 중복 값이란?

두 개의 컬럼에 서로 반대 순서로 저장된 동일한 데이터 쌍을 '역방향 중복 값'이라고 합니다. 예를 들어 ('Delhi', 'Nagpur')와 ('Nagpur', 'Delhi')는 사실상 같은 정보를 담고 있으므로, 데이터 정리를 위해 하나만 남기고 나머지는 제거하는 것이 좋습니다.

예제 테이블 확인하기

이 개념을 이해하기 위해 다음과 같은 'details_city' 테이블의 데이터를 사용해 보겠습니다.

mysql> Select * from details_city;
+--------+--------+
| City1  | City2  |
+--------+--------+
| Delhi  | Nagpur |
| Delhi  | Mumbai |
| Nagpur | Delhi  |
| Katak  | Delhi  |
| Delhi  | Katak  |
+--------+--------+
5 rows in set (0.00 sec)

위 테이블을 보면 ('Delhi', 'Nagpur')와 ('Nagpur', 'Delhi'), 그리고 ('Katak', 'Delhi')와 ('Delhi', 'Katak')처럼 순서만 뒤바뀐 중복 쌍이 존재합니다.

역방향 중복 값 필터링하기

다음 쿼리는 비교 조건을 활용하여 역방향 중복 값을 걸러내는 방법을 보여줍니다.

mysql> Select a.city1, a.city2 from details_city a WHERE a.city1 <= a.city2;
+-------+--------+
| city1 | city2  |
+-------+--------+
| Delhi | Nagpur |
| Delhi | Mumbai |
| Delhi | Katak  |
+-------+--------+
3 rows in set (0.06 sec)

쿼리 동작 원리

핵심은 WHERE 절의 a.city1 <= a.city2 조건입니다. 이 조건은 첫 번째 컬럼의 값이 두 번째 컬럼의 값보다 작거나 같은 행만 선택합니다. 문자열 비교에서 'Delhi'는 'Nagpur'보다 알파벳순으로 앞서기 때문에 ('Delhi', 'Nagpur')는 유지되지만, ('Nagpur', 'Delhi')는 조건에 맞지 않아 결과에서 제외됩니다.

이렇게 하면 각 도시 쌍이 한 번씩만 나타나며, 실제로 중복 행을 삭제하려면 위 SELECT 쿼리를 DELETE 문의 조건으로 응용하면 됩니다.