多对多关系查询~~比较好的一个SQL语句
有以下三张表:
学生表 t1
Stu_id |
Stu_name |
1 |
张三 |
2 |
李四 |
3 |
王五 |
课程表 t2
Co_id |
Co_name |
1 |
Java |
2 |
C# |
3 |
C |
4 |
C++ |
5 |
Javascript |
关系表 t3
Stu_id |
Co_id |
1 |
1 |
1 |
4 |
2 |
1 |
2 |
3 |
2 |
5 |
题目要求出现的结果是:张三 java,c++
答案:
select distinct stu_name,
stuff((select ','+co_name from t3,t2 where a.stu_id=stu_id and t3.co_id=t2.co_id for xml path('')),1,1,'') from t3 a,t1 b where a.stu_id=b.stu_id
解析:
1.stuff(str1,start,length,str2)比较简单,是一个可以设置起始位置的替换字符串函数。
str1是原始字符串。
start是要替换的起始位置。
length是要替换原始字符串内容的长度。
str2是替换的新内容。
例子:stuff('12345',2,2,'000') 的结果为'100045',既'12345'的第二位'2'开始,长度为二,既'23',替换为'000',得到结果'100045'。当然也有其他的简单方法可以做到同样效果
2.for xml path则复杂一些,是将查询到的结果生成XML数据