参考:
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
以上。