You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于指定数据库Schema的SQL查询构建与语句纠错请求

解答两个SQL查询问题及代码纠错

1. 查询所有有库存书籍所在的城市名称

要实现这个需求,我们需要关联book、instock和branch三张表,找到所有至少存1本的书籍对应的城市,并用DISTINCT避免重复的城市记录:

SELECT DISTINCT branch.city
FROM book
INNER JOIN instock ON book.ISBN = instock.ISBN
INNER JOIN branch ON instock.libname = branch.libname
WHERE instock.quantity >= 1;

逻辑说明:

  • 通过book与instock的关联,筛选出所有有库存的书籍(quantity >=1确保满足“至少存一本”的要求)
  • 再关联branch表,获取这些书籍所在分馆的城市
  • DISTINCT用来去重(同一城市可能有多个分馆存放同一本书,避免重复输出城市名)

2. 查询墨尔本分馆中库存副本数最多的书籍的作者与书名(含代码纠错)

先说说你写的语句里的几个问题:

  • 列名错误:book表中没有author字段,正确的字段名是authorname
  • 缺少范围筛选:没有限定“墨尔本分馆”的条件,需要关联branch表并筛选城市为墨尔本
  • 逻辑不完整:单纯GROUP BY无法直接定位到库存最多的书籍,需要借助子查询或窗口函数来获取最大值

根据题目可能的两种歧义(单分馆库存/墨尔本所有分馆总库存),提供两种解决方案:

情况1:墨尔本某一分馆中单本书的库存最多

如果题目指的是墨尔本任意一个分馆里,某本书的库存数量最高:

-- 使用RANK()会保留并列第一的书籍,若只想取其中一本可用ROW_NUMBER()
SELECT authorname AS author, title
FROM (
    SELECT 
        book.authorname,
        book.title,
        instock.quantity,
        RANK() OVER (ORDER BY instock.quantity DESC) AS rank_num
    FROM book
    INNER JOIN instock ON book.ISBN = instock.ISBN
    INNER JOIN branch ON instock.libname = branch.libname
    WHERE branch.city = '墨尔本'
) AS ranked_books
WHERE rank_num = 1;

情况2:墨尔本所有分馆中某本书的总库存最多

如果题目指的是把墨尔本所有分馆的库存加总后,总数量最高的书籍:

SELECT book.authorname AS author, book.title
FROM (
    SELECT 
        instock.ISBN,
        SUM(instock.quantity) AS total_stock,
        RANK() OVER (ORDER BY SUM(instock.quantity) DESC) AS rank_num
    FROM instock
    INNER JOIN branch ON instock.libname = branch.libname
    WHERE branch.city = '墨尔本'
    GROUP BY instock.ISBN
) AS total_stock_data
INNER JOIN book ON total_stock_data.ISBN = book.ISBN
WHERE rank_num = 1;

对你原语句的基础修正版:
如果暂时不想用窗口函数,修正后的基础写法如下(仅处理单分馆库存,不支持并列情况):

SELECT book.authorname AS author, book.title
FROM book
INNER JOIN instock ON book.ISBN = instock.ISBN
INNER JOIN branch ON instock.libname = branch.libname
WHERE branch.city = '墨尔本'
AND instock.quantity = (
    SELECT MAX(quantity)
    FROM instock
    INNER JOIN branch ON instock.libname = branch.libname
    WHERE branch.city = '墨尔本'
);

内容的提问来源于stack exchange,提问作者Sayed bin Mujaheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:08:46