2010-01-06 38 views
5

Có thể đặt GROUP_CONCAT vào một mệnh đề MYSQL WHERE không?Sử dụng MYSQL GROUP_CONCAT trong mệnh đề WHERE

Tôi có hai bảng (một cho các thành viên và một cho thông tin thanh toán). Ví dụ

viên Bảng

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 

Bảng thanh toán

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 

Tôi đã truy vấn sau đây để lấy thông tin từ cả hai bảng (Tôi đã đơn giản hóa nó để làm cho nó dễ đọc hơn) .

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 

Nhưng loại bỏ "2009" khỏi kết quả của cột subscriptionYear. Không thể xem liệu năm 2009 có nằm trong GROUP_CONCAT kết quả không?

Trả lời

23

Xảy ra TRƯỚC KHI nhóm, bạn muốn sử dụng HAVING, điều này xảy ra sau khi nhóm.

+1

Tuyệt vời! Cảm ơn bạn đã rất nhanh chóng và hữu ích. Đã không nghĩ rằng nó sẽ được dễ dàng! Vì một lý do nào đó tôi đã không gặp HAVING. này bây giờ works- CHỌN members.num, members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) AS searchSurname, GROUP_CONCAT (payment.subscriptionYear) Như subscriptionYear, GROUP_CONCAT (payment.amount) Số tiền AS TỪ thành viên TRÁI PHẢI THANH TOÁN TRÊN thành viên.memNumber = payment.memberID WHERE 'subscriptionYear' NOT LIKE '% 2009%' GROUP BY members.num HAVING subscriptionYear NOT LIKE '% 2009%' ORDER BY 'searchSurname' ASC – iagdotme

+1

Đó không phải là dự phòng? Nếu WHERE của bạn đang xóa các dòng 2009 trước khi nhóm, không có nhóm nào thậm chí có năm 2009 trong nhóm đó? Hoặc chỉ là trường hợp ví dụ của bạn chỉ là một ví dụ chứ không phải là truy vấn thực tế. – MindStalker

Các vấn đề liên quan