C컬럼을 검색할때 A컬럼을 중복제외하고 A,B,C 컬럼값을 가져오는 검색 쿼리문 질문입니다.
본문
table1 테이블에
A,B,C 값이
A => aaa,bbb,ccc,aaa,bbb,ccc,
B => a,b,c,d,e
C => 6,abc1,8,9,abc1,abc1
이렇게 있다고 가정하고
C컬럼을 검색해서
A컬럼의 중복값 제외하고
A,B,C 컬럼의 값을 출력하려고 합니다.
DISTINCT 를 쓸려고 했지만
컬럼을 모든컬럼이나 1개만 가져올수있는것같고,
모든컬럼 * 를 사용하면 다른컬럼의 중복체크도 하기때문에
제가 원하는결과값이 아닙니다.
GROUP BY 로
select A,B,C from table1 where C like '%ab%' GROUP BY A
이런식으로 해봤는데
안되더라구요....
어떻게하면 될까요???
구문 사용법이 틀린걸까요??
답변 3
GROUP_CONCAT 으로 GROUP 절 이외 컬럼을 묶어보세요
select A,GROUP_CONCAT(B,C) from table1 where C like '%ab%' GROUP BY A
다만 이 방법은 GROUP_CONCAT 의 제한 사이즈가 있기 때문에 결과 길이가 너무 큰 문자열이 될 경우 잘릴수 있음에 유의해야 하거나 필요한 경우 설정 변경이 필요할수 있습니다.
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_group_concat_max_len
SELECT A, B, C FROM table1 WHERE C LIKE '%ab%' GROUP BY A HAVING COUNT(*) = 1;
C컬럼을 검색해서
A컬럼의 중복값 제외하고
A,B,C 컬럼의 값을 출력하려고 합니다
==
C컬럼에는 있고
A칼럼에는 없는 레코드를 가져오는 건가요?
Self join으로 처리 하면 어떨까요