如何用PostgreSQL查询指定家长所有子女读过的书籍?
解决方案:查询指定家长子女读过的书籍集合
这需求很明确,咱们直接用多表关联查询就能搞定,我给你写好实用的SQL语句,再拆解下细节逻辑:
核心查询语句
SELECT DISTINCT b.name AS book_name FROM parent p JOIN child c ON p.id = c.parent JOIN book b ON c.id = b.readBy WHERE p.name = 'Bob'; -- 把这里的字符串替换成你要查询的家长名称,比如'Mary'
逻辑拆解
- 表关联逻辑:通过
parent.id关联child.parent,再通过child.id关联book.readBy,把家长、子女、书籍的关联关系完整串起来,确保只获取有对应关系的有效记录 - 去重处理:用
DISTINCT关键字避免同一本书被多个子女阅读时重复出现在结果里,完美匹配“集合”的要求 - 参数适配:实际业务场景中,可以把固定字符串
'Bob'换成参数占位符(比如PostgreSQL里的$1),方便动态传入查询的家长名称
测试验证
- 当传入参数
'Bob'时,返回结果为:- Crime & Punishment
- Goodnight Moon
- The Singularity
- One Fish Two Fish
- 当传入参数
'Mary'时,返回结果为:- Narnia
如果遇到某个家长没有子女,或者子女没读过任何书的情况,这个查询会返回空结果,完全符合预期。
内容的提问来源于stack exchange,提问作者Gershom Maes
相关产品推荐
相关产品推荐

