Sqlite多条件SELECT问题:查询所属公开分类超5个的产品
错误原因
你之前的写法存在两个核心问题:
- 直接关联PRODUCTS和CATEGORIES表但没有加关联条件,会生成笛卡尔积,返回大量冗余的错误结果
- 公开分类的筛选条件没有作用到分类数量统计的逻辑中,子查询统计的仍然是产品所有分类的总数量,外层的PRIVATE筛选仅能过滤掉没有关联公开分类的产品,无法实现「公开分类数量超过5」的统计需求
正确写法
方案1:子查询改造(和你原有写法逻辑兼容)
首先在统计分类数量的子查询中关联分类表,筛选出公开分类后再统计数量:
SELECT NAME FROM PRODUCTS WHERE ID_PROD IN ( SELECT pc.ID_PROD FROM PROD_CAT pc INNER JOIN CATEGORIES c ON pc.ID_CAT = c.ID_CAT -- 此处PRIVATE字段值请根据实际规则调整:如果PRIVATE=0代表公开就保留0,若PRIVATE=1代表公开则修改为1 WHERE c.PRIVATE = 0 GROUP BY pc.ID_PROD HAVING COUNT(*) > 5 )
方案2:关联聚合写法
也可以直接通过多表关联聚合实现,逻辑更直观:
SELECT p.NAME FROM PRODUCTS p INNER JOIN PROD_CAT pc ON p.ID_PROD = pc.ID_PROD INNER JOIN CATEGORIES c ON pc.ID_CAT = c.ID_CAT WHERE c.PRIVATE = 0 -- 同样根据公开标识规则调整值 GROUP BY p.ID_PROD, p.NAME HAVING COUNT(*) > 5
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

