j_t*_*ion 2 sql vb.net sql-server asp.net select
Mentor table
------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)
Student table
-------------
name (varchar)
contact (int)
english (boolean)
french (boolean)
german (boolean)
Run Code Online (Sandbox Code Playgroud)
我想根据语言将导师与学生匹配,例如:
如果导师1知道英语和法语,他将与所有至少懂英语或法语的学生匹配.
mentor1 (english, french)
-------------------------
studentA (english);
studentB (english, french);
studentC (english, german);
studentD (english, french, german)
Run Code Online (Sandbox Code Playgroud)
如果导师2只知道德语,他将与所有至少知道德语的学生匹配.匹配的学生不仅仅知道德语.
mentor2 (german)
----------------
studentC (english, german)
studentD (english, french, german)
Run Code Online (Sandbox Code Playgroud)
通常我会使用一堆if then else拼凑一个sql字符串,但我gridview用来显示数据,所以我不知道我能做什么.
样本代码和教程总是受欢迎的.
编辑:忘了提这个mentor表也会有像name和的列contact.所以输出gridview应该是每行1行mentor.
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);
Run Code Online (Sandbox Code Playgroud)
如果你的表的结构没有每个语言的字段而是记录,那么这将更容易
Table: Mentor(MentorName, Language)
Rows:
Mentor1 | English
Mentor2 | Englisn
Mentor2 | French
Run Code Online (Sandbox Code Playgroud)
为学生做同样的事情,然后查询是:
Select
m.MentorName
, m.Language
, s.StudentName
from Mentor as m
inner join Student as s
on m.Language = s.Language
Run Code Online (Sandbox Code Playgroud)
这里的好处是,如果您添加另一种语言,它纯粹是数据输入,无需更改表结构或代码,但这并不总是一种选择.