Sql问题,从3个表中选择

时间:2016-05-19 13:20:24

标签: sql sql-server

我有3张桌子:

Student - CodS NameS 
Discipline - CodD NameD YearD 
Subscrib - CodD CodS

我希望看到在所有来自第2年的学科中订阅的学生的姓名。

Select S.Name
From Student S
Where S.CodS in (Select Sub.CodS
                     From Subscrib Sub
                     where Sub.CodDisc in (Select D.CodDisc
                                         From Discipline D
                                         Where D.Year = 2
                                        ))

但是这会返回第2年的学科名称。我只想要第2年所有学科的名称。 有人可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:1)

除非这是英语之外的其他语言,否则您的命名惯例似乎非常糟糕。你不需要在这里尝试保存位。我们不再使用穿孔卡了。制作有意义的列名。

此外,数据类型的前缀(我假设YearD中的D和NameS中的S是)是坏主意。如果您想知道列的数据类型,可以很容易地找到它。

SELECT
    S.NameS
FROM
    Student
INNER JOIN Subscrib SUB ON SUB.CodS = S.CodS
INNER JOIN Discipline D ON D.CodD = SUB.CodD AND D.YearD = 2
GROUP BY
    S.NameS
HAVING
    COUNT(*) = (SELECT COUNT(*) FROM Discipline WHERE YearD = 2)