无关联字段时,如何统计item表score小于template表max_score的行数?
正确的SQL查询实现方法
你原查询的核心错误是:在FROM子句里把item表的别名设为template,相当于只查询了item单表,根本没有关联到真正的template表,导致WHERE条件里的max_score字段无效。
根据你的需求,分两种场景给出解决方案:
场景1:template表仅存一行max_score(如全局阈值配置)
如果template表只存储一个全局的max_score值,直接用子查询获取该值即可,避免不必要的笛卡尔积:
SELECT COUNT(*) FROM item WHERE score < (SELECT max_score FROM template);
场景2:template表有多行max_score值
如果需要统计item每一行与template每一行的组合中,满足score < max_score的总数量,使用交叉连接生成所有组合后筛选统计:
SELECT COUNT(*) FROM item CROSS JOIN template WHERE item.score < template.max_score;
补充场景:统计item中至少小于一个template.max_score的行数
如果你的需求是统计item里只要存在一个template的max_score比它大的行数(而非所有符合条件的组合数),可以用EXISTS子查询:
SELECT COUNT(*) FROM item i WHERE EXISTS ( SELECT 1 FROM template t WHERE i.score < t.max_score );
内容的提问来源于stack exchange,提问作者Eric Evans
相关产品推荐
相关产品推荐

