안녕하세요 현재 Mysql을 사용해서 쿼리를 짜고 있는데 도중에 group_concat에 관해 문의가 생겨 글을 남깁니다.
SELECT A.ID, group_concat(B.NAME ORDER BY CNT DESC) AS 'BNAMES' FROM A INNER JOIN B ON A.ID = B.AID
이렇게 사용했을땐 BNAMES라는 컬럼이 원하는대로 출력이 됩니다. 하지만 여기서 B.NAME에 조건을 추가해버리면 BNAMES은 조건 안에 부합된 것들만 출력이 되는데 어떻게 쿼리를 변경해야할지 막막하여 문의드립니다.ㅠ
B.NAME IN 조건과 상관 없이 BNAME은 다 나왔으면 좋겠습니다.
SELECT A.ID, group_concat(B.NAME ORDER BY CNT DESC) AS 'BNAMES' FROM A INNER JOIN B ON A.ID = B.AID WHERE B.NAME IN ( XXXXXXXXX, XXXXX, XXX )
1. 질문의 쿼리들이 다 이상합니다.
MySQL 에서는 정상 동작하지만. 타 DB 에서는 오류가 나는 비표준 구문입니다.
그룹바이 집계 쿼리의 표준에 어긋나는 구문입니다.
- GROUP BY a.id 를 해야 하거나 -> ID 별 집계
- SELECT 절에서 a.id 를 빼야 합니다. -> 전체 집계
2. 질문도 이상합니다.
- 조건은 주되 다나와야 한다?
- 조건을 빼면 되죠?
3. 원본 대비 원하는 결과 샘플 예를 들어 주시면 좋겠습니다.
죄송합니다 질문을 조금 잘못 작성했습니다. 아랫분 쿼리 이용해서 하니 정상적으로 작동하였습니다. 다음부턴 한번 더 확인하고 글 작성하겠습니다..!
이런의미로 말씀하신 건지요?
SELECT *
FROM (
SELECT a.id, group_concat(b.name ORDER BY cnt DESC) AS bnames
FROM a INNER JOIN b ON a.id = b.id
GROUP BY a.id) tmp
WHERE bnames LIKE '%키워드1%'
OR bnames LIKE '%키워드2%';
감사합니다 질문이 이상한데도 답변해주신 대로 해보니 정상작동합니다!