Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有条件的群_CONCAT_Mysql_Group Concat - Fatal编程技术网

Mysql 有条件的群_CONCAT

Mysql 有条件的群_CONCAT,mysql,group-concat,Mysql,Group Concat,在下面的示例中,我使用group concat连接car和new_颜色 GROUP_CONCAT(DISTINCT CONCAT( car, ' - ' , new_color) ORDER BY car SEPARATOR '; ') AS car_color 结果: Fiat -; Ford - red; BMW - blue; 仅当新颜色有值时,如何添加“-”(将汽车与新颜色分开) 在我的示例中,期望的结果是: Fiat

在下面的示例中,我使用group concat连接car和new_颜色

GROUP_CONCAT(DISTINCT CONCAT( car, ' - ' , new_color) ORDER BY car SEPARATOR '; ') AS car_color
结果:

Fiat -;
Ford - red;
BMW - blue;                                 
仅当新颜色有值时,如何添加“-”(将汽车与新颜色分开)

在我的示例中,期望的结果是:

Fiat ;
Ford - red;
BMW - blue; 

使用
concat\u ws

GROUP_CONCAT(DISTINCT CONCAT_WS(' - ', car, case when trim(new_color) = '' then null else newcolor end) ORDER BY car SEPARATOR '; ') AS car_color

就像@said,
NULLIF(TRIM(new\u color),”
在mysql中会更简单。

使用
concat\u ws

GROUP_CONCAT(DISTINCT CONCAT_WS(' - ', car, case when trim(new_color) = '' then null else newcolor end) ORDER BY car SEPARATOR '; ') AS car_color
SELECT GROUP_CONCAT(DISTINCT
                    CASE new_color WHEN NULL THEN car WHEN '' THEN car
                    ELSE CONCAT(car, ' - ' , new_color) END
                    ORDER BY car SEPARATOR '; ') AS car_color
FROM car_table

就像@said,
NULLIF(TRIM(new_color),“”)
在mysql中会更简单。

只有当
new_color
NULL时,才会出现空字符串。@MatteoTassinari很好,当你在这里发表评论时,我正在尝试修复它。请再次检查。感谢Forward和MatteoNow,它可以工作:)您可以使用
NULLIF(修剪(新颜色),“”)简化
CASE
语句,请参阅此查询,Concat将针对每个记录运行,并对速度产生影响,最好在Concat函数之前使用CASE语句,查看我的答案…只有当
new\u color
NULL
时,才有效,空字符串仍然会被连接起来。@MatteoTassinari很好,我正试图在您在此处发表评论时修复它。请再次检查。感谢转发和MatteoNow,它会起作用:)您可以使用
NULLIF(修剪(新颜色),“”)简化
CASE
语句,请参阅此查询,Concat将针对每个记录运行,并将对速度产生影响,最好在Concat函数之前使用CASE语句,请参阅我的答案。。。
SELECT GROUP_CONCAT(DISTINCT
                    CASE new_color WHEN NULL THEN car WHEN '' THEN car
                    ELSE CONCAT(car, ' - ' , new_color) END
                    ORDER BY car SEPARATOR '; ') AS car_color
FROM car_table