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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:09:03