2010-01-06 6 views
5

Можно ли поместить GROUP_CONCAT в предложение MYSQL WHERE?Использование MYSQL GROUP_CONCAT в предложении WHERE

У меня есть две таблицы (одна для членов и одна для информации об оплате). Например

Пользователи Таблица

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 

Но это снимает «2009» от результатов subscriptionYear колонны. Не можете увидеть, есть ли в результирующей GROUP_CONCAT 2009?

ответ

23

ГДЕ ДОПОЛНИТЕЛЬНО группироваться, вы хотите использовать HAVING, что происходит после группировки.

+1

Фантастический! Спасибо, что так быстро и полезно. Не думал, что это будет так просто! По какой-то причине я не столкнулся с HAVING. Теперь это работы- ВЫБОР members.num, members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) А.С. searchSurname, GROUP_CONCAT (payment.subscriptionYear) As subscriptionYear, GROUP_CONCAT (payment.amount) как количество от членов LEFT JOIN платежа ПО members.memNumber = payment.memberID где 'subscriptionYear' не так, как '% 2009%' GROUP BY members.num HAVING subscriptionYear не нравится '% 2009%' ЗАКАЗ BY 'searchSurname' ASC – iagdotme

+1

Разве это не избыточно? Если ваш WHERE удаляет строки 2009 года перед группировкой, в группе не должно быть даже 2009? Или это просто случай, когда ваш пример является просто примером, а не фактическим запросом. – MindStalker