我手头有一项任务,要求我返回一个学生的详细信息,该学生参加了一位姓霍夫曼的老师所教的课程,但我陷入了困境。
SELECT * FROM Public."Class" WHERE tid=(
SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman');
这让我回到了霍夫曼教授的课程,但从这里我不知道该去哪里。我相信我必须访问“已注册”表,最后访问学生表,但尝试无济于事。以下查询是我在中断查询之前得到的 -_- 我确信我必须使用HAVING
or IN
关键字,但我不太知道如何处理它们!
SELECT * FROM Public."Student" WHERE programme='IT' (
SELECT * FROM Public."Class" WHERE tid=(
SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman')
);
任何帮助将非常感激!
数据库结构如下:-
Student(sid integer, sname varchar(20), programme varchar(4), level integer, age integer)
Class(ccode varchar(6), cname varchar(25), week_day varchar(3), meets_at time, room
varchar(6), tid integer)
Enrolled(sid integer, ccode varchar(6))
Tutor(tid integer, tname varchar(20))
再次感谢 :)
Update:-
SELECT DISTINCT *
FROM Public."Student" s
INNER JOIN Public."Enrolled" e ON e.sid = s.sid
INNER JOIN Public."Class" c ON c.ccode = e.ccode
INNER JOIN Public."Tutor" t ON t.tid = c.tid
WHERE programme='IT' AND t.tname LIKE '%Hoffman';
您不需要为每个验证执行子查询。这可以通过 JOINS 轻松完成:
SELECT s.*
FROM Student s
INNER JOIN Enrolled e ON e.sid = s.sid
INNER JOIN Class c ON c.ccode = e.ccode
INNER JOIN Tutor t ON t.tid = c.tid
WHERE t.tname LIKE '%Hoffman';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)