多对多关系查询~~比较好的一个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数据

 

 

posted @ 2010-12-08 09:29  瑞君  Views(700)  Comments(0Edit  收藏  举报