首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一个表中的数据从表中选择行

根据另一个表中的数据从表中选择行
EN

Stack Overflow用户
提问于 2013-12-13 22:00:48
回答 2查看 211关注 0票数 2
代码语言:javascript
复制
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懂英语和法语,他将与所有至少懂英语或法语的学生相提并论。

代码语言:javascript
复制
mentor1 (english, french)
-------------------------
studentA (english); 
studentB (english, french); 
studentC (english, german);
studentD (english, french, german)  

如果mentor2只懂德语,他将与所有至少懂德语的学生相提并论。相配的学生不仅能懂德语。

代码语言:javascript
复制
mentor2 (german)
----------------
studentC (english, german)
studentD (english, french, german)

通常,我只会使用一堆if then else来拼凑一个string,但是我使用gridview来显示数据,所以我不知道我能做什么。

欢迎使用示例代码和教程。

编辑:忘了提到mentor表也有namecontact这样的列。因此,gridview上的输出应为每mentor 1行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-14 10:28:59

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2013-12-13 22:05:10

代码语言:javascript
复制
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);

如果您的表没有为每种语言构造字段,而是为一条记录,这就更容易了。

代码语言:javascript
复制
Table: Mentor(MentorName, Language)
Rows:
Mentor1 | English
Mentor2 | Englisn
Mentor2 | French

对学生也这样做,然后查询如下:

代码语言:javascript
复制
Select
   m.MentorName
   , m.Language
   , s.StudentName

from Mentor as m
inner join Student as s
on m.Language = s.Language

这里的好处是,如果您添加了另一种语言,它只是纯粹的数据输入,不需要更改表结构或代码,但这并不总是一种选择。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20576763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档