学生表
Stu_id |
Stu_name |
1 |
张三 |
2 |
李四 |
3 |
王五 |
课程表
Co_id |
Co_name |
1 |
Java |
2 |
C# |
3 |
C |
4 |
C++ |
5 |
Javascript |
关系表
Stu_id |
Co_id |
1 |
1 |
1 |
4 |
2 |
1 |
2 |
3 |
2 |
5 |
前几天去面试被问了一道关于数据库的问题。到现在也没找到答案。
题目是这样的:有学生表、课程表和关系表,查出学生所选的课程。
我当时就想通过连接查询。当然这样的话会出现重复出现同一个学生姓名的情况。如:
张三 |
Java |
张三 |
C++ |
可是题目要求出现的情况是:张三 java,c++
请问这个SQL该如何写。
select Stu_name,stuff(select ',' + Co_name
from 课程表
where Co_id=g.Co_id for xml path(''),1,1'') as 课程
from 学生表 as x inner join 关系表 as g on x.Stu_id=g.Stu_id
看不太明白!!
答案也完全没看懂
佩服答案人,昨天想半天只想到临时表
根据题目意思我首先判断哪张是主表让后得到主表的详细信息,
据题目意思是关系表为主表,而其他的为基本信息表。这样SQL就可以得出来了
select b.stu_name,c.co_name
from
relation a
left join student b on a.stu_id=b.stu_id
left join course c on a.co_id=c.co_id
where b.stu_name='张三'
SELECT dbo.Stu.Stu_name, dbo.Co.Co_nameFROM dbo.Co INNER JOIN dbo.T3 ON dbo.Co.Co_id = dbo.T3.Co_id INNER JOIN dbo.Stu ON dbo.T3.Stu_id = dbo.Stu.Stu_idWHERE (dbo.Stu.Stu_name = '张三')
牛人,都是牛人。已经学完SQL有一年了,还不知道有这种用法。长见识了~