了解mysql concat()函数

 

concat(arg1,arg2,....):将形参对应字段的值组合成一个字符串mysql

假设:如今有一张学生表(test_user)sql

将这三个字段组合成一个字符串做为第四个字段函数

select test_user.*, concat(test_user.id,test_user.`name`,test_user.sex) as introduction from test_user GROUP BY `name`;

可是查询出来的数据没有分割符,能够在concat中加入常量spa

select test_user.*, concat(test_user.id,',',test_user.`name`,',',test_user.sex) as introduction from test_user GROUP BY `name`;

这样写若是分隔符都同样,又要一直加,那不是很麻烦。3d

mysql提供另外一个函数concat_ws(separator,arg1,arg2,.....),第一个参数为分隔符,第二个之后的参数为字段名code

select u.*, concat(u.id,',',u.`name`,',',u.sex) as introduction, CONCAT_WS('.',u.id,u.`name`,u.sex) as xinxi
  from test_user u GROUP BY u.`name`;

这些只是对单条记录数据的拼接。blog

 

如今多了张课程表(test_subject)字符串

想查询每一个学生的课程有哪些io

select * from test_user LEFT JOIN test_subject on test_user.id = test_subject.user_id;

可是这样看起来不够直观。那就干脆先按名称分组。class

select 
  *
from
  test_user LEFT JOIN test_subject
on test_user.id = test_subject.user_id
GROUP BY test_user.`name`;

可是分完组以后,课程只剩下一个了,没有达到预期的要求,

mysql提供一个函数GROUP_CONCAT(arg1),内部的形参在分组时,则在arg1字段中将属于该分组的值字段进行拼接,拼接顺序会被order by影响

select 
  test_user.*,
  GROUP_CONCAT(test_subject.`subject`) as `subject`
from
  test_user LEFT JOIN test_subject
on
  test_user.id = test_subject.user_id
GROUP BY
  test_user.`name`;

完成。清晰明了的显示各个学生全部的科目。

相关文章
相关标签/搜索