postgresql 多个子查询

标签 postgresql subquery pgadmin

我手头有一项任务,要求我返回一名学生的详细信息,该学生参加了一位姓霍夫曼的老师教授的类(class),但我被卡住了。

    SELECT * FROM Public."Class" WHERE tid=(
        SELECT tid FROM Public."Tutor" WHERE tname LIKE '%Hoffman');

这让我回到了 Hoffman 教授的类(class),但我不确定从这里去哪里。我相信我必须访问“已注册”表,然后最后访问学生表,但尝试无济于事。以下查询是我在中断查询之前得到的 -_- 我确定我必须使用 HAVINGIN 关键字,但我没有完全知道如何处理它们!

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))

再次感谢:)

更新:-

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';

关于postgresql 多个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20452655/

相关文章:

java - 多次迭代函数中使用的 JPA 查询优化

sql - SELECT 查询合并/加入 PostgreSQL 中的两个表

postgresql - 查询工具上的 pgAdminIII 错误

PostgreSQL 在导入 CSV 时将 header 留空

amazon-redshift - 从 pgAdmin 连接到 Redshift 集群

sql - 如何在更新中将 bigint 转换为带时区的时间戳

sql - 如何在每个新形成的组中对聚合进行排名?

mysql - SQL 子查询/子选择从下一行获取值而没有自动递增 id 或任何不同的字段加入

mysql - 更新2张表

sql - 创建链接到另外 2 个表的表的聚合查询