2010-01-06 6 views
5

में MYSQL GROUP_CONCAT का उपयोग करना क्या एक MYSQL WHERE क्लॉज में 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 

लेकिन यह subscriptionYear स्तंभ के परिणामों से निकाल देता "2009"। क्या देख नहीं सकता है कि 200 परिणामस्वरूप GROUP_CONCAT में है?

उत्तर

23

समूहिंग से पहले कहां होता है, आप हैविंग का उपयोग करना चाहते हैं, जो समूह के बाद होता है।

+1

शानदार! इतनी जल्दी और सहायक होने के लिए धन्यवाद। ऐसा नहीं लगता था कि यह इतना आसान होगा! किसी कारण से मैं हैविंग में नहीं आया था। यह अब works- चयन members.num, members.memNumber, members.fullName, members.corporateName, concat (members.corporateName, members.surname) searchSurname के रूप में, group_concat (payment.subscriptionYear) subscriptionYear के रूप में, group_concat (payment.amount) राशि के रूप में सदस्यों से बाईं तरफ members.memNumber = payment.memberID जहां 'subscriptionYear' नहीं की तरह '% 2009%' ग्रुप members.num द्वारा होने subscriptionYear नहीं की तरह '% 2009%' भुगतान में शामिल हों 'खोजअर्ननाम' द्वारा आदेश ASC – iagdotme

+1

क्या वह अनावश्यक नहीं है? यदि ग्रुपिंग से पहले आपकी WHERE 200 लाइनों को हटा रहा है, तो इसमें कोई समूहिंग 200 9 भी नहीं होनी चाहिए? या यह सिर्फ आपके उदाहरण का एक उदाहरण है, न कि वास्तविक क्वेरी। – MindStalker