Mentor table
------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)
Student table
-------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)我想将导师与基于语言的学生联系起来,例如:
如果mentor1懂英语和法语,他将与所有至少懂英语或法语的学生相提并论。
mentor1 (english, french)
-------------------------
studentA (english);
studentB (english, french);
studentC (english, german);
studentD (english, french, german) 如果mentor2只懂德语,他将与所有至少懂德语的学生相提并论。相配的学生不仅能懂德语。
mentor2 (german)
----------------
studentC (english, german)
studentD (english, french, german)通常,我只会使用一堆if then else来拼凑一个string,但是我使用gridview来显示数据,所以我不知道我能做什么。
欢迎使用示例代码和教程。
编辑:忘了提到mentor表也有name和contact这样的列。因此,gridview上的输出应为每mentor 1行。
发布于 2013-12-14 10:28:59
SELECT m.*, s.name
FROM dbo.Mentor m
JOIN dbo.Student s
ON EXISTS
(
SELECT x.LanguageID
FROM
(
SELECT 1 AS LanguageID WHERE s.english = 1 UNION ALL
SELECT 2 AS LanguageID WHERE s.french = 1 UNION ALL
SELECT 3 AS LanguageID WHERE s.german = 1
) x
INTERSECT
SELECT y.LanguageID
FROM
(
SELECT 1 AS LanguageID WHERE m.english = 1 UNION ALL
SELECT 2 AS LanguageID WHERE m.french = 1 UNION ALL
SELECT 3 AS LanguageID WHERE m.german = 1
) y
)
ORDER BY m.name发布于 2013-12-13 22:05:10
Select
m.MentorName
, m.Language
, s.StudentName
from Mentor as m
inner join Student as s
on (m.English = 1 and m.English = s.English)
or (m.french = 1 and m.French = s.French)
or (m.German = 1 and m.German = s.German);如果您的表没有为每种语言构造字段,而是为一条记录,这就更容易了。
Table: Mentor(MentorName, Language)
Rows:
Mentor1 | English
Mentor2 | Englisn
Mentor2 | French对学生也这样做,然后查询如下:
Select
m.MentorName
, m.Language
, s.StudentName
from Mentor as m
inner join Student as s
on m.Language = s.Language这里的好处是,如果您添加了另一种语言,它只是纯粹的数据输入,不需要更改表结构或代码,但这并不总是一种选择。
https://stackoverflow.com/questions/20576763
复制相似问题