我在sql中有一个表"Student“,它的结构是:
StudentId FirstName LastName
1 X Y
....和一个语言表,它的结构:
LanguageId Name
1 English
2 Mandarin
3 Spanish
.....以及关系表StudentLanguage (学生所说的语言)
StudentId LanguageId
1 1
1 3
2 1
2 2在我的asp.net页面上,我想使用复选框按口语过滤学生。
例如,当我检查英语和普通话时,我想让学生同时说英语和普通话,当我检查法语、西班牙语、英语和西班牙语时,==>Get学生说法语、英语和西班牙语。
为此,我将一个名为@LanguageTable(LanguageId smallint)的语言参数表传给了一个存储过程。如何在不使用游标的情况下使用此表获取学生。
我已经尝试了CTE,但没有结果。
发布于 2011-03-24 23:55:37
试试这个:
select s.StudentId,s.FirstName,s.LastName
from Stundent s
join StudentLanguage sl on s.StudendID=sl.StudentId
join @LanguageTable on sl.LanguageId=@LanguageTable.LanguageId
group by s.StudentId,s.FirstName,s.LastName
having count(*)=(select count(*) from @LanguageTable)发布于 2011-03-24 23:48:21
SELECT s.StudentId, s.FirstName, s.LastName
FROM Student s
WHERE NOT EXISTS(SELECT *
FROM @LanguageTable l
WHERE NOT EXISTS(SELECT *
FROM StudentLanguage sl
WHERE sl.LanguageId = l.LanguageId
AND sl.StudentId = s.StudentId)) 发布于 2011-03-24 23:55:08
我还没有测试过这个,但是:
SELECT s.StudentId, s.FirstName, s.LastName
FROM Student s
INNER JOIN StudentLanguage sl ON sl.StudentId = s.StudentId
INNER JOIN @Language l ON l.LanguageId = sl.LanguageId
GROUP BY s.StudentId, s.FirstName, s.LastName
HAVING Count(*) = (SELECT COUNT(*) FROM @Language)https://stackoverflow.com/questions/5421726
复制相似问题