MySQL IF IN GROUP_CONCAT 中断

标签 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

一个客户可以有一个协议(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/

相关文章:

php - PDO Mysql 准备语句 last_insert_id 在多插入时返回错误值?

php - 如何在MySQL更新记录上使用substr?

mysql - 我们可以在 show 语句中使用像 concat() group_concat() 这样的函数吗?

mysql - 优化 GROUP_CONCAT 查询

MYSQL 在插入查询中使用多个选择返回列数与第 1 行的值数不匹配

MySQL查询、计数问题

PHP - 无法将图像名称添加到数据库表

mysql group_concat 逗号分隔的 id 以匹配名称

mysql - 使用 GROUP_CONCAT 重复值而不在具有多个连接的 MySQL 查询上使用 DISTINCT

SQL 服务器 : How do I return all columns where one is not repeated?