select需要与postgresql中的一对多表进行多个连接

cyvaqqii  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(390)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

11个月前关门了。
改进这个问题
玩具示例:我有一个数据库模式,如edr图所示:

学生一对多与学习小组
学习一对多分组学习
借一对多的书。
我想把一个学生的所有学习小组借的书都拿出来。

+------------+---------+----------------+
| student.id | book.id | study_group.id |
+------------+---------+----------------+
|          1 |       1 |              1 |
|          1 |       2 |              1 |
|          1 |       3 |              1 |
|          1 |       4 |              2 |
|          1 |       1 |              2 |
+------------+---------+----------------+

我不知道在这种情况下如何构造多重连接,

SELECT student.id, book.id, study_group.id
FROM ...
    INNER JOIN...
    INNER JOIN...
WHERE student.id == 1
ergxz8rk

ergxz8rk1#

我建议您阅读sql连接和不同类型的连接
如果您希望您的表如图所示:

SELECT student.id, book.id, study_group.id
FROM student
    INNER JOIN study_group on (student.id = study_group.student_id)
    INNER JOIN borrowed on (study_group.id = borrowed.group_id)
    INNER JOIN book on (borrowed.book_id = book.id)
WHERE student.id == 1
t2a7ltrp

t2a7ltrp2#

下面是一种使用聚合的方法:

select b.id, b.title
from books b
inner join borrowed bd on bd.book_id = b.id
inner join studyGroup sg on sg.id = bd.study_group_id
where sg.student_id = 1
group by b.id, b.title
having count(*) = (select count(*) from studyGroup sg1 where sg1.student_id = 1)

相关问题