SQL如何统计匹配多筛选条件的行数及子查询别名报错处理
问题修复方案
1. 直接修复现有写法
你原来的代码已经给两个子查询分别分配了别名a和b,报错是因为部分严格的SQL引擎要求FROM后所有派生结果集都要有别名,给JOIN后的整体结果加一个全局别名即可:
SELECT COUNT(DISTINCT(main_id)) FROM ( SELECT other_id, main_id FROM database.table WHERE other_id ='5' ) a INNER JOIN ( SELECT other_id, main_id FROM database.table WHERE other_id ='6' ) b USING (main_id) AS combined_result
2. 更高效的优化写法
不需要关联两次表,用分组聚合逻辑可以实现相同需求,性能和可读性更好:
SELECT COUNT(DISTINCT main_id) FROM database.table WHERE other_id IN ('5', '6') GROUP BY main_id HAVING COUNT(DISTINCT other_id) = 2
逻辑说明:
- 先筛选出
other_id为指定两个值的所有行 - 按
main_id分组,用HAVING条件过滤出同时包含两个other_id值的分组 - 最终统计符合条件的
main_id总数即可
内容的提问来源于stack exchange,提问作者DN1
相关产品推荐
相关产品推荐

