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

MySQL查询仅关联禁用分类的商品

仅关联禁用分类的商品查询方案

原SQL的问题

你提供的SQL只能筛选出至少关联了一个禁用分类的商品,但无法排除那些同时关联了启用分类的商品,所以不符合“仅关联禁用分类”的需求。

几种可行的解决方案

方案一:使用NOT EXISTS排除关联启用分类的商品

逻辑直观,先确保商品有禁用分类关联,再排除存在启用分类关联的商品:

SELECT p.id
FROM products p
WHERE EXISTS (
    SELECT 1
    FROM products_categories pc
    JOIN categories c ON pc.category_id = c.id
    WHERE pc.product_id = p.id
      AND c.status = 0
)
AND NOT EXISTS (
    SELECT 1
    FROM products_categories pc
    JOIN categories c ON pc.category_id = c.id
    WHERE pc.product_id = p.id
      AND c.status = 1
);

方案二:分组后通过聚合函数判断

利用MAX()函数特性(status只有0和1两种值),分组后如果最大status为0,说明该商品关联的所有分类都是禁用状态:

SELECT pc.product_id AS id
FROM products_categories pc
JOIN categories c ON pc.category_id = c.id
GROUP BY pc.product_id
HAVING MAX(c.status) = 0;

注:如果需要包含无任何分类关联的商品,可通过左连接products表并处理NULL值调整。

方案三:左连接排除启用分类关联

通过左连接启用分类的关联记录,筛选出左连接结果为空的商品(即无启用分类关联),同时确保有禁用分类关联:

SELECT DISTINCT p.id
FROM products p
JOIN products_categories pc ON p.id = pc.product_id
JOIN categories c ON pc.category_id = c.id AND c.status = 0
LEFT JOIN products_categories pc2 ON p.id = pc2.product_id
LEFT JOIN categories c2 ON pc2.category_id = c2.id AND c2.status = 1
WHERE c2.id IS NULL;

内容的提问来源于stack exchange,提问作者Cudos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:06:34