오늘 mysql 데이터베이스에 있는 데이터중 중복된 데이터를 확인해봐야할 일이 생겼다.
중복된 값이 있는 데이터들의 목록
을 보는 것은 아래처럼 가능하다.
1 | select * from (table name) group by (column name) having count(column name)>1; |
하지만 이 경우, 각 중복값들에 대한 구체적인 내용은 볼 수가 없다.
오늘 해결해야했던 상황은 B
컬럼에 중복된 값이 있는 경우 그 행들의 A
컬럼 값을 비교하고 같은 데이터인지 등을 확인할 필요가 있었다.
따라서 B
컬럼에서 각각의 값들이 중복된 값이 있는가를 확인해야 했고, 간단한 검색 후 다음 쿼리를 만들었다.
동작 원리는 B
컬럼에서 중복된 값을 갖고 있는 값들의 리스트를 뽑고, 그 값들을 갖는 데이터를 모두 가져오는 방식이었다. (실제 사용때는 order by B, A
를 사용해서 중복된 값들로 1차 정렬, 비교할 값들로 1차정렬하였다.)
1 | select * from tableName where B in (select B from tableName group by B having count(B)>1); |
다행이 잘 작동하였고, 이외에도 같은 구문내에서 where
절과 order by
절도 사용가능하였다.