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

多表关联的自连接查询结果异常问题求助

修正你的SQL查询:获取书籍名称及关联页面数量

我来帮你搞定这个查询问题~先看看你原SQL里的几个问题,再给出正确的写法:

原SQL的问题点

  • 混合使用了旧的逗号表连接和INNER JOIN,导致attributes b和attributes p之间没有关联条件,产生了不必要的笛卡尔积,结果自然不对
  • 拼写错误:groub by应该是group by
  • 统计逻辑有误:你试图通过关联页面的Attributes记录来统计数量,但其实不需要绕这一步,直接通过Book表的关联关系就能统计页面数

正确的SQL写法

根据你的表结构和需求,我们可以这样写:

SELECT 
    attr_book.VALUE AS "book",
    COUNT(book.PID) AS "PAGE COUNT"
FROM 
    Attributes attr_book
LEFT JOIN 
    Book ON attr_book.ID = Book.BID
WHERE 
    attr_book.KEY = 'A'
GROUP BY 
    attr_book.VALUE;

逻辑解释

  1. 先从Attributes表中筛选出书籍属性记录:通过attr_book.KEY = 'A'拿到所有书籍的ID(对应Book表的BID)和名称(VALUE)
  2. 用LEFT JOIN关联Book表:通过书籍ID(attr_book.ID = Book.BID)拿到该书籍对应的所有页面PID
  3. 统计页面数量:COUNT(book.PID)会统计每个书籍关联的页面总数,用LEFT JOIN的好处是如果某本书没有关联页面,也会显示出来,数量为0(如果不需要这种情况,换成INNER JOIN即可)

针对你的示例数据的结果

用你给出的示例数据执行这个SQL,会得到预期的结果:

bookPAGE COUNT
Book12

另外补充一下:你的Page表和Book表是反向关联的,其实两者存储的是同一组关联关系,查询时只用其中一张表就够啦,不需要同时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:29:10