Psy*_*tis 1 postgresql subquery pgadmin
我手头有一项任务,要求我返回一名学生的详细信息,该学生就读于由霍夫曼姓氏老师教授的课程中,我被困住了.
SELECT * FROM Public."Class" WHERE tid=(
SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman');
Run Code Online (Sandbox Code Playgroud)
这让我回到霍夫曼教授的课程,但从这里我不知道该往哪里去.我相信我必须访问'注册'表,然后最终访问学生表,但试图无济于事.以下查询是在我打破查询之前得到的-_-我确定我将不得不使用HAVINGor IN关键字,但我不知道如何处理它们!
SELECT * FROM Public."Student" WHERE programme='IT' (
SELECT * FROM Public."Class" WHERE tid=(
SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman')
);
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
数据库结构如下: -
Run Code Online (Sandbox Code Playgroud)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))
再次感谢 :)
更新: -
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';
Run Code Online (Sandbox Code Playgroud)
您不需要为每个验证执行子查询.这可以通过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';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |