로그처럼 특정키를 기준으로 문자열을 저장할 때, 변경된 문자열이 일치하는지 여부를 확인하고 싶을때가 있습니다. 이런경우 활용할 만한 쿼리문을 소개합니다.
상품의 이력을 관리하는 테이블이 있다고 가정해봅시다.
CREATE TABLE products (
product_code VARCHAR(20), -- 상품 코드
text VARCHAR(255), -- 상품에 대한 텍스트
registration_date DATE -- 등록일
);
SQL
복사
그리고, 상품의 설명의 이력을 날짜별로 저장했습니다.
INSERT INTO products (product_code, text, registration_date) VALUES
('P001', 'Product A Description', '2024-10-01'),
('P001', 'Different Product A Description', '2024-10-05'),
('P002', 'Product B Description', '2024-10-02'),
('P003', 'Product C Description', '2024-10-03'),
('P003', 'Different Product C Description', '2024-10-04');
SQL
복사
여기서, 상품의 설명이 변경된 상품코드를 검색하고 싶을 수 있습니다.
서로 다른 텍스트 찾기 쿼리
같은 product_code 그룹 내에서 텍스트가 다른 경우를 찾아 출력합니다.
SELECT
product_code,
GROUP_CONCAT(DISTINCT text ORDER BY registration_date ASC) AS unique_texts
FROM
products
GROUP BY
product_code
HAVING
COUNT(DISTINCT text) > 1;
SQL
복사
출력 예시
위 쿼리를 실행하면 다음과 같은 결과가 나옵니다.
product_code | unique_texts |
P001 | Product A Description, Different Product A Description |
P003 | Product C Description, Different Product C Description |
설명
•
GROUP BY product_code를 통해 같은 product_code를 가진 레코드들을 그룹화했습니다.
•
GROUP_CONCAT(DISTINCT text ORDER BY registration_date ASC)는 각 그룹에서 중복을 제거하고, 등록일 순으로 정렬된 문자열을 연결해 표시합니다.
•
HAVING COUNT(DISTINCT text) > 1 조건은 텍스트가 한 개 이상 다른 경우만 출력하게 합니다.
마치며
•
실무에서 충분히 발생할 수 있는 케이스입니다. (변경내역 검증, 그룹내 다른값 추출 등)
•
이 글에서는 최대한 쉬운예시를 들어 설명했지만, 좀더 복잡한 구조에서도 충분히 활용 가능한 쿼리문입니다.
◦
예시 : 2개이상 테이블 구조, 기준이 되는 그룹이 여러개인경우 등