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

嵌套子查询实现跨表计数的写法咨询及错误SQL修正指导

问题分析与正确写法

你的SQL存在的问题:

  • 语法错误:语句中重复使用了FROM关键字,子查询定义后直接接第二个FROM,违反SQL语法规则。
  • 关联逻辑错误:子查询中引用了外部查询的r.title_id和m.member_id,但未建立正确的关联关系;同时WHERE条件里的m.member_id = rr.title_id是错误关联,应该匹配会员ID,即rr.member_id = m.member_id。
  • 缺少分组逻辑:统计借阅次数需要按member_id和title_id分组,否则count(*)会计算所有记录的总数,无法得到每位会员每本书的单独借阅次数。

正确的嵌套子查询写法

写法一:子查询先统计,再关联会员表

这种方式先在子查询中完成借阅次数的统计,再与会员表关联获取会员信息,执行效率更高:

SELECT 
    m.member_id,
    m.last_name,
    m.first_name,
    rental_stats.title_id,
    rental_stats.rental_count
FROM 
    member m
INNER JOIN 
    (SELECT 
         member_id, 
         title_id, 
         COUNT(*) AS rental_count
     FROM 
         rental
     GROUP BY 
         member_id, title_id) AS rental_stats
ON 
    m.member_id = rental_stats.member_id;

写法二:关联子查询直接计算次数

通过关联子查询在SELECT语句中直接计算当前会员当前图书的借阅次数:

SELECT 
    m.member_id,
    m.last_name,
    m.first_name,
    r.title_id,
    (SELECT COUNT(*) 
     FROM rental rr 
     WHERE rr.member_id = m.member_id AND rr.title_id = r.title_id) AS rental_count
FROM 
    member m
INNER JOIN 
    rental r ON m.member_id = r.member_id
GROUP BY 
    m.member_id, m.last_name, m.first_name, r.title_id;

内容的提问来源于stack exchange,提问作者Dudu Dudu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:40:31