Mysql 有条件的群_CONCAT
在下面的示例中,我使用group concat连接car和new_颜色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(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