SQL多表连接如何查询全部分馆对应《The Lost Tribe》馆藏数,无则返回NULL
SQL查询需求实现方案
原代码核心问题
- 关联顺序错误:要输出所有图书馆分馆,必须以
tbl_library_branch分馆表作为主表做左关联,原代码先关联分馆和副本表、再右连图书表的逻辑,会直接丢失没有对应图书副本的分馆记录 - 过滤条件位置错误:将书名筛选放在全局WHERE子句中,会过滤掉所有未匹配到《The Lost Tribe》的行,最终仅保留有馆藏的分馆
修正后的可执行代码
SELECT l.branchName, r.noOfCopies FROM tbl_library_branch l LEFT JOIN tbl_book_copies r ON l.branchId = r.branchId AND r.bookId = (SELECT bookId FROM tbl_book WHERE title = 'The Lost Tribe')
逻辑说明
主表使用全量分馆表,保证所有分馆都会出现在结果中;目标图书的筛选逻辑放在LEFT JOIN的关联条件里,仅关联对应书籍的副本记录,无对应馆藏的分馆noOfCopies字段自动返回NULL,不会被过滤。
如果需要无馆藏时返回0而非NULL,可将查询字段替换为COALESCE(r.noOfCopies, 0)。
内容的提问来源于stack exchange,提问作者Mint
相关产品推荐
相关产品推荐

