簡體   English   中英

根據另一個表中的數據從表中選擇行

[英]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表還將具有諸如namecontact列。 所以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM