我有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年所有学科的名称。 有人可以帮忙吗?
谢谢
答案 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)