2010-01-06 8 views
5

MYSQL WHERE 절에 GROUP_CONCAT을 넣을 수 있습니까?WHERE 절에서 MYSQL GROUP_CONCAT 사용

두 개의 테이블이 있습니다 (하나는 회원 용이고 다른 하나는 지불 정보 용). 예를

회원 테이블에 대한

num, memNumber, fullName, coporateName, surname 
001, mem0010, Joe Bloggs, NULL, Bloggs 
002, mem0015, NULL, BBC 
003, mem0017, John Peters, NULL 
004, mem0101, Emma Jane, NULL 

지불 표 (나는 단순화 그것이 더 쉽게 읽을 수 있도록하기 위해) 두 테이블에서 정보를 검색하려면 다음 쿼리를 한

num, memberID, subscriptionYear, amount 001, mem0010, 2008, 30 003, mem0010, 2010, 40 004, mem0015, 2010, 40 005, mem0017, 2009, 35 006, mem0101, 2009, 35 007, mem0017, 2010, 40 

.

SELECT members.num, members.memNumber , members.fullName , members.corporateName , 
     CONCAT(members.corporateName , members.surname) AS searchSurname , 
     GROUP_CONCAT(payment.subscriptionYear) As subscriptionYear , 
     GROUP_CONCAT(payment.amount) AS amount  
FROM members 
LEFT JOIN payment ON members.memNumber = payment.memberID  
WHERE `subscriptionYear` NOT LIKE '%2009%'  
GROUP BY members.num  
ORDER BY `searchSurname` ASC 

는하지만 그것은 subscriptionYear 컬럼의 결과에서 "2009 년"을 제거합니다. 2009 년 GROUP_CONCAT 결과가 표시되지 않습니까?

답변

23

그룹화하기 전에 어떤 일이 발생 했습니까? 그룹화 후에 HAVING을 사용하려고합니다.

+1

환상적! 너무 빠르고 도움이되어 주셔서 감사합니다. 그렇게 쉬울 것이라고 생각하지 않았습니다! 웬일인지 나는 간 적이 없었다. 이 이제 SELECT members.num, searchSurname AS members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) GROUP_CONCAT (payment.subscriptionYear) subscriptionYear로서 GROUP_CONCAT을 작품 - 양 AS (payment.amount)는 회원들로부터 WHERE'subscriptionYear' NOT LIKE '% 2천9%'members.num BY GROUP subscriptionYear NOT LIKE '% 2천9%을'HAVING members.memNumber = payment.memberID ON 지불 가입 LEFT ORDER BY'searchSurname' ASC – iagdotme

+1

그렇게 중복되지 않습니까? 그룹화하기 전에 2009 라인을 제거하려는 경우 그룹화에 2009 년이 있어야합니다. 아니면 실제 쿼리가 아닌 예제 일뿐입니다. – MindStalker

관련 문제