2010-01-06 20 views
5

Czy można umieścić GROUP_CONCAT w klauzuli WHYS MYSQL?Używanie MYSQL GROUP_CONCAT w klauzuli WHERE

Mam dwie tabele (jedną dla członków i jedną dla informacji o płatności). Na przykład

Tabela

Członkowie

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 

Płatność Tabela

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 

Mam następującą kwerendę, aby pobrać informacje z obu tabel (I uprościły to aby uczynić go bardziej czytelnym) .

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 

Ale usuwa „2009” z wynikami kolumnie subscriptionYear. Nie widzisz, czy rok 2009 jest w wynikowym GROUP_CONCAT?

Odpowiedz

23

GDZIE Zdarza się PRZED zgrupowaniem, chcesz użyć HAVING, co dzieje się po zgrupowaniu.

+1

Fantastyczne! Dzięki, że jesteś taki szybki i pomocny. Nie sądziłem, że to będzie takie proste! Z jakiegoś powodu nie natknąłem się na HAVING. to teraz works- SELECT members.num, members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) jako searchSurname, group_concat (payment.subscriptionYear) jako subscriptionYear, GROUP_CONCAT (payment.amount) jako ilość od członków LEFT JOIN wpłata na members.memNumber = payment.memberID WHERE 'subscriptionYear' NOT LIKE '% 2009%' GROUP BY members.num BIORĄC subscriptionYear nie jak '% 2009%' ORDER BY 'searchSurname' ASC – iagdotme

+1

Czy to nie jest zbyteczne? Jeśli WHERE usuwa linie 2009 przed grupowaniem, żadne ugrupowanie nie powinno mieć w nim 2009 r.? Czy jest to tylko przypadek twojego przykładu będącego tylko przykładem, a nie faktycznym zapytaniem. – MindStalker

Powiązane problemy