Mysql IF IN GROUP_CONCAT中断

Cle*_*ric 5 mysql group-concat

我正在做一个相当大的SQL所以我道歉,不能提供我的表的更大的例子.

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
Run Code Online (Sandbox Code Playgroud)

客户可以签订协议,协议可以提供很多服务.我想要弄清楚的是,"网络"是否是该协议中的服务之一.

由于GROUP_CONCAT返回逗号分隔列表,因此对我的情况来说感觉很完美.但我无法让它工作,我的想法已经不多了.

如果只有一个服务并且该服务是'network'则返回yes,但是如果有多个服务则返回No.

如果我使用(INT)service_id而不是没有区别,除非INT Im正在寻找列表中的第一个.但那仅适用于INT,如果'network'在列表中排在第一位,则返回No.

我试过了:

if( 'network' IN ( CAST(GROUP_CONCAT( DISTINCT services.service_code
                                      SEPARATOR ' ' ) AS CHAR)  ),
                   'Yes','No')
Run Code Online (Sandbox Code Playgroud)

if( 'network' IN ( concat('\'',
                   GROUP_CONCAT(DISTINCT services.service_code
                                SEPARATOR '\', \'' ),
                   '\'') ), 'Yes','No')
Run Code Online (Sandbox Code Playgroud)

如果我的解释听起来很混乱,我可以提供更多的例子.

谢谢.

ajr*_*eal 6

我是一个大风扇group_concat,但你不需要group_concat在这种情况下,

sum( if(services.service_code='network', 1, 0) ) as networkservice
Run Code Online (Sandbox Code Playgroud)


小智 6

GROUP_CONCAT函数返回一个字符串,因此您可以使用FIND_IN_SET. 它需要一个逗号分隔的字符串作为第二个参数。

IF(  FIND_IN_SET ('network', GROUP_CONCAT( DISTINCT services.service_code SEPARATOR ',' )  ), 'Yes','No') as networkservice
Run Code Online (Sandbox Code Playgroud)