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

如何查询无任何关联评论的产品 现有LEFT JOIN写法是否需加HAVING

问题诊断

你现有的写法确实存在问题:如果某款产品存在关联评论,只是其中某条评论的content字段为空,你的SQL会把这类产品也筛选出来,不符合「完全没有任何关联评论」的需求。


可选解决方案

方案1:用NOT EXISTS实现(最推荐,逻辑直观性能优)

直接判断该产品在评论表中没有任何匹配记录即可,不会被空字段干扰:

SELECT *
FROM products p
WHERE NOT EXISTS (
    SELECT 1
    FROM reviews r
    WHERE r.product_id = p.id
);

方案2:修改LEFT JOIN的判断条件

不用判断reviews.content是否为空,改为判断评论表的非空主键(比如reviews.id)是否为空即可:只要产品有至少一条评论,reviews.id就一定会有值,只有完全没有匹配评论时才会为NULL。注意要加DISTINCT避免产品有多个空content评论时返回重复数据:

SELECT DISTINCT p.*
FROM products p
LEFT JOIN reviews r
ON p.id = r.product_id
WHERE r.id IS NULL;

方案3:用GROUP BY + HAVING实现

你提到的HAVING子句也可以实现该需求,逻辑是统计每个产品的关联评论数,筛选出评论数为0的产品:

SELECT p.*
FROM products p
LEFT JOIN reviews r
ON p.id = r.product_id
GROUP BY p.id
HAVING COUNT(r.id) = 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:21:04