Im đang thực hiện một SQL khá lớn vì vậy tôi xin lỗi vì không thể cung cấp ví dụ lớn hơn về các bảng của tôi.Mysql IF IN GROUP_CONCAT ngắt
SELECT
customer_id,
agreement_id,
if('network' IN (GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR ',') ),
'Yes','No') as networkservice
FROM customers
INNER JOIN agreement USING(customer_id)
INNER JOIN services USING(agreement_id)
GROUP BY customer_id
Khách hàng có thể thỏa thuận và thỏa thuận có thể có nhiều dịch vụ. Những gì tôi đang cố gắng để tìm hiểu là nếu 'mạng' là một trong những dịch vụ trong thỏa thuận đó.
Vì GROUP_CONCAT trả về danh sách được phân cách bằng dấu phẩy, nên nó hoàn toàn phù hợp với trường hợp của tôi. Nhưng tôi không thể làm cho nó hoạt động và tôi hết ý tưởng.
Nếu chỉ có một dịch vụ và dịch vụ đó là 'mạng' nó sẽ trả về có, nhưng nếu có nhiều hơn thì một trong nó sẽ trả về số
Nếu tôi sử dụng (INT) service_id thay vào đó nó làm cho không có sự khác biệt, trừ khi INT Im đang tìm kiếm đầu tiên trong danh sách. Nhưng thats chỉ cho INT, nếu 'mạng' là lần đầu tiên trong danh sách nó sẽ trả về số
Tôi đã thử:
if('network' IN (CAST(GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR ' ') AS CHAR) ),
'Yes','No')
Và
if('network' IN (concat('\'',
GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR '\', \''),
'\'')), 'Yes','No')
tôi có thể cung cấp thêm ví dụ nếu lời giải thích của tôi có vẻ khó hiểu.
Cảm ơn.
Xin cảm ơn, đừng bao giờ nghĩ đến việc sử dụng SUM. Tôi đã sử dụng nó như thế này 'NẾU (tổng (nếu (service.service_code = 'mạng', 1, 0))> 0, 'Có', 'Không' là dịch vụ mạng' và nó hoạt động tốt. – Cleric