我正在执行一个相当大的 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
一个客户可以有一个协议(protocol),一个协议(protocol)可以有很多服务。我想知道的是“网络”是否是该协议(protocol)中的服务之一。
因为 GROUP_CONCAT 返回一个逗号分隔的列表,所以它非常适合我的情况。但我无法让它发挥作用,而且我的想法已经用完了。
如果只有一项服务且该服务是“网络”,则返回"is",但如果有多个服务,则返回“否”。
如果我改用 (INT)service_id 则没有任何区别,除非我正在寻找的 INT 在列表中排在第一位。但这仅适用于 INT,如果“网络”在列表中排在第一位,则返回否。
我试过:
if( 'network' IN ( CAST(GROUP_CONCAT( DISTINCT services.service_code
SEPARATOR ' ' ) AS CHAR) ),
'Yes','No')
和
if( 'network' IN ( concat('\'',
GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR '\', \'' ),
'\'') ), 'Yes','No')
如果我的解释听起来令人困惑,我可以提供更多示例。
谢谢。
最佳答案
我是 group_concat
的 super 粉丝,但在这种情况下您不需要group_concat
sum( if(services.service_code='network', 1, 0) ) as networkservice
关于MySQL IF IN GROUP_CONCAT 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7259023/