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
답변에 대한 댓글 3개
[code]
GROUP_CONCAT(CONCAT('B::', B),CONCAT('::::C::', C))
[/code]
그리고 역시 그만큼 group_concat_max_len 을 낭비합니다.
row 쉼표 부분 또한 GROUP_CONCAT 의 SEPARATOR 키워드로 변경 가능합니다.
[code]
GROUP_CONCAT(CONCAT('B::', B),CONCAT(',C::', C) SEPARATOR '::::')
[/code]
댓글을 작성하려면 로그인이 필요합니다.
C컬럼을 검색해서
A컬럼의 중복값 제외하고
A,B,C 컬럼의 값을 출력하려고 합니다
==
C컬럼에는 있고
A칼럼에는 없는 레코드를 가져오는 건가요?
Self join으로 처리 하면 어떨까요
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
SELECT A, B, C FROM table1 WHERE C LIKE '%ab%' GROUP BY A HAVING COUNT(*) = 1;
답변에 대한 댓글 2개
#1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxxx'which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
PhpMyAdmin 에서는 위처럼 에러가 뜨는데
혹시 sql_mode=only_full_group_by 이 값이 설정되어서 안되는건가요?
이건 호스팅사에서 변경 안해줄거같은데...
혹시 다른방법은 없을까요??
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
혹시 GROUP_CONCAT(B,C) 에서
B 컬럼과 C 컬럼을 분리시킬수는 없나요?
값이 합쳐져서 나와서
row는 쉼표로 구분하면 될거같긴한데...