C컬럼을 검색할때 A컬럼을 중복제외하고 A,B,C 컬럼값을 가져오는 검색 쿼리문 질문입니다.

C컬럼을 검색할때 A컬럼을 중복제외하고 A,B,C 컬럼값을 가져오는 검색 쿼리문 질문입니다.

QA

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

약간은 억지스럽게(?) 이런식으로 가능하긴 합니다.


GROUP_CONCAT(CONCAT('B::', B),CONCAT('::::C::', C))

그리고 역시 그만큼 group_concat_max_len 을 낭비합니다.

row 쉼표 부분 또한 GROUP_CONCAT 의 SEPARATOR 키워드로 변경 가능합니다.

GROUP_CONCAT(CONCAT('B::', B),CONCAT(',C::', C) SEPARATOR '::::')

SELECT A, B, C FROM table1 WHERE C LIKE '%ab%' GROUP BY A HAVING COUNT(*) = 1;

적어주신것을 대입해서 쿼리문을 돌려봤는데,

#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 이 값이 설정되어서 안되는건가요?
이건 호스팅사에서 변경 안해줄거같은데...

혹시 다른방법은 없을까요??

C컬럼을 검색해서 

A컬럼의 중복값 제외하고

A,B,C 컬럼의 값을 출력하려고 합니다

==

C컬럼에는 있고

A칼럼에는 없는 레코드를 가져오는 건가요?

Self join으로 처리 하면 어떨까요

위에 베르만님이 알려주신대로 GROUP BY 를 이용해서 GROUP_CONCAT 로 컬럼 구분해서 해결하긴했는데 혹시 다른 좋은 방법이 있나요? 예시 코드 써주시면 감사하겠습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 58
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT