【问题标题】:MYSQL concat after Left Join is not showing valuesLeft Join 后的 MYSQL concat 未显示值
【发布时间】:2015-12-11 23:22:41
【问题描述】:

我有一个清单 A:

Item | Company 
1    | aa
2    | bb

列表 B:

Item | Info
2    |  blablabla

我有以下查询:

SELECT a.item, concat(A.company, ' - ', B.info) 
From A LEFT JOIN B on A.item = B.item

这是我得到的:

1    None
2    bb - blalal

我想得到什么:

1    aa - 
2    bb - blalal

【问题讨论】:

  • 请张贴(使用edit添加到您的问题)您想要获得的结果。

标签: mysql left-join concat


【解决方案1】:

concat() 返回NULL 如果任何参数是NULL 一个简单的解决方案是coalesce()

SELECT a.item, concat(A.company, ' - ', coalesce(B.info, '')) 
From A LEFT JOIN
     B
     on A.item = B.item;

您似乎想要分隔符。如果你没有,另一种选择是:

SELECT a.item, concat_ws(' - ', A.company, B.info) 

【讨论】:

  • 这行得通。非常感谢。所以我们有一个 concat_ws 在所有参数之间添加分隔符并跳过 NULL 值,但是我们没有常规版本的 concat 跳过 NULL ?
  • @viviwill 。 . .是的,您似乎了解这两个功能。我认为concat() 的NULL 行为是由ANSI 定义的。此外,使用coalesce()concat_ws() 也没有简单的解决方法。
【解决方案2】:

利用 IFNULL

SELECT A.Item, CONCAT(A.Company, ' - ', IFNULL(B.Info,'')) 
FROM A  
LEFT JOIN B ON A.Item=B.Item;

【讨论】:

  • coalesce() 是 sql 标准,应该使用而不是 ifnull()
猜你喜欢
  • 2019-08-13
  • 2018-07-27
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多