concat() 和 concat_ws() -- 多表关联 拼接字段值

参考:

https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc

concat_ws函数的具体可以看这个博主整理的资料:https://www.cnblogs.com/crystaltu/p/6699004.html ,这里简单说一下:(separator,str1,str2,...) 代表 concat with separator ,是concat()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果参数中存在NULL,则会被忽略。

解决:

concat()或 concat_ws()


需求:

user表和parent表进行关联,需要将user表中的真实名称name,和parent表中的nick_name进行拼接,如果parent表中不存在对应数据,则只返回user表的name。

以user表为主,sql使用left join ,以user_id进行关联。

user表数据:

parent表数据:

实施

1、关键字:concat

SELECT
	concat( u.NAME, "--", p.nick_name ) 
FROM
	`user` u
	LEFT JOIN parent p ON u.id = p.user_id

结果:

2、但是当parent表数据只有一条时,发生问题:

结果:

原因大概说明:

经试验,如果在同一个表中,concat两个字段其中一个为空,那么会只返回不为空的数据。

但因为left join 如果右边没有的话 是直接返回空的。如果关联表中字段为空,则concat结果为null。

解决办法:concat_ws关键字

SELECT
	concat_ws("--", u.NAME, p.nick_name ) 
FROM
	`user` u
	LEFT JOIN parent p ON u.id = p.user_id

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值