2010-01-06 29 views
5

¿Es posible poner GROUP_CONCAT en una cláusula MYSQL WHERE?Usando MYSQL GROUP_CONCAT en la cláusula WHERE

Tengo dos tablas (una para miembros y otra para información de pago). Por ejemplo

Tabla

miembros

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 

Pago Tabla

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 

Tengo el siguiente consulta para recuperar información de ambas tablas (He simplificado para que sea más legible) .

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 

pero elimina el "2009" de los resultados de la columna de la subscriptionYear. ¿No puedo ver si 2009 está en la GROUP_CONCAT resultante?

Respuesta

23

DONDE sucede ANTES de la agrupación, usted quiere usar HAVING, que ocurre después de la agrupación.

+1

¡Fantástico! Gracias por ser tan rápido y servicial. ¡No pensé que sería tan fácil! Por alguna razón, no me había encontrado CON TENER. Esto ahora funciona- members.num SELECT, members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) AS searchSurname, GROUP_CONCAT (payment.subscriptionYear) Como subscriptionYear, GROUP_CONCAT (payment.amount) como la cantidad de los miembros combinación izquierda de pago en members.memNumber = payment.memberID donde 'subscriptionYear' NOT LIKE '% 2009%' GROUP BY HAVING members.num subscriptionYear NOT LIKE '% 2009%' PEDIDO POR 'searchSurname' ASC – iagdotme

+1

¿No es eso redundante? Si su DONDE está eliminando líneas 2009 antes de la agrupación, ¿ninguna agrupación debería tener 2009 en ella? O es solo un ejemplo de que su ejemplo es solo un ejemplo y no la consulta real. – MindStalker