日期:2014-05-17  浏览次数:20565 次

这个查询语怎么写?(查询字段值包含了某个数值的所有结果)
用到了两个表teacher和student

student的字段和值如下:
id name schoolId
1 张三 1
2 李四 1
3 王五 2
4 宋六 1
5 郑七 2

teacher的字段和值如下:
id name studentId
1 王老师 3,5,11
2 李老师 1,3
3 余老师 2,5,6,7
4 张老师 3,4
我要的查询结果是,提供一个学生的id,然后查出teacher表中studentId字段里包含了该id值的所有行。
比如我要查出学生id包含有3的所有老师,即王老师,李老师和张老师。
我试图用 where like 这样的模糊查询,但结果有误,比如给定学生id为1时,会把11的值也查出来。
帮帮忙,谢谢!

------解决方案--------------------
拆出来,链接一下student表即可。

code=sql]--if object_id('[TB]') is not null drop table [TB]
--go
--create table [TB] (id int,name nvarchar(6),studentId VARCHAR(20))
--insert into [TB]
--select 1,'王老师','3,5,11' union all
--select 2,'李老师','1,3' union all
--select 3,'余老师','2,5,6,7' union all
--select 4,'张老师','3,4'

--select * from [TB]



;with TT as 
(select id,name,studentId=cast(left(studentId,charindex(',',studentId+',')-1) as nvarchar(100)),Split=cast(stuff(studentId+',',1,charindex(',',studentId+','),'') as nvarchar(100)) from TB
union all
select id,name,studentId=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from TT where split>''
)
select id,name,studentId from TT order by id,name option (MAXRECURSION 0)


/*
id name studentId
1 王老师 3
1 王老师 5
1 王老师 11
2 李老师 1
2 李老师 3
3 余老师 2
3 余老师 5
3 余老师 6
3 余老师 7
4 张老师 3
4 张老师 4*/[/code]
------解决方案--------------------
select * from teacher where charindex('3',studentId,0)>0
------解决方案--------------------
select name from teacher where charindex(','+'3'+',',','+studentId+',')>0