[英]select rows from table based on data from another table
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
將sql字符串拼湊在一起,但是我正在使用gridview
來顯示數據,所以我不確定該怎么辦。
始終歡迎示例代碼和教程。
編輯:忘記提及mentor
表還將具有諸如name
和contact
列。 所以gridview
的輸出應該是每個mentor
1行。
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
這樣做的好處是,如果您添加另一種語言,那純粹是數據輸入,無需更改表結構或代碼,但這並不總是一種選擇。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.