查询三位及以上作者的论文:SQL语句正确性咨询
分析你查询三位及以上作者论文的SQL语句
咱们来逐个拆解你写的两条SQL,看看问题出在哪:
第一条SQL的问题
这条语句的逻辑完全跑偏啦!你这里的acnum应该是作者编号吧?Where acnum >3是在筛选作者编号大于3的作者记录,根本不是在统计每篇论文的作者数量,完全没达到你要找“有三位及以上作者的论文”的需求。另外distinct在这里也没有实际作用,反而可能额外消耗性能,完全可以去掉。
第二条SQL的问题
这条的思路是对的:通过关联论文表和作者表,按论文编号、标题分组后统计作者数量,这个方向没问题。但有个关键的小错误:你用了Having count(a.acnum) >3,这会筛选出**作者数量超过3位(也就是4位及以上)**的论文,而你的需求是“三位及以上”,所以条件应该改成count(a.acnum) >=3。
补充个小优化:如果acnum字段不会出现空值,用count(*)会更高效,因为数据库不需要判断字段是否为空,最终统计结果是一样的。
修正后的SQL示例
select p.panum, p.title from paper p join author a on a.panum = p.panum group by p.panum, p.title having count(a.acnum) >= 3;
或者更高效的版本:
select p.panum, p.title from paper p join author a on a.panum = p.panum group by p.panum, p.title having count(*) >= 3;
内容的提问来源于stack exchange,提问作者sogyals429
相关产品推荐
相关产品推荐

