有业务场景: 学生表s_student, 兴趣表s_hobby 表,其中 s_student 一对多s_hobby . 需要我们在一张以s_hobby为主表的列表中,其中一个字段为该学生的所有兴趣. 下面上sql. 其中stuff 的作用是去掉前面的",".当然也可以在java代码中处理. cast的作用的转成String完成封装到对象, 因为for xml path出来的是blob格式.不转换会封装失败!
select name ,
cast(stuff((SELECT ',' + hobby
FROM s_hobby
WHERE student_id = st.id
FOR XML PATH ('')), 1, 1, '') AS NVARCHAR(1000)) hobbies
from s_student st