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

数据库查询需求:基于WHERE条件排除行,筛选不含鸡蛋的食谱

嘿,我懂你碰到的麻烦了——你的recipe表是每行对应一种食材,直接用WHERE IngredientName != '鸡蛋'肯定得不到正确结果,毕竟有鸡蛋的食谱里还有其他食材行,这样查询还是会把那个食谱的非鸡蛋食材行捞出来,导致它依然出现在结果里。

正确的查询方案

要找出完全不含鸡蛋的食谱,核心逻辑是:排除所有至少包含一次鸡蛋的食谱,剩下的就是我们要的。下面给你两种靠谱的实现方式:

方式1:用NOT EXISTS子查询(最直观)

这个方法的思路是:对每个食谱,检查它有没有鸡蛋的食材记录,如果没有,就保留这个食谱名:

SELECT DISTINCT Recipename
FROM recipe r_main
WHERE NOT EXISTS (
    SELECT 1
    FROM recipe r_sub
    WHERE r_sub.Recipename = r_main.Recipename
      AND r_sub.IngredientName = '鸡蛋'
);

这里的DISTINCT是为了去重——毕竟一个食谱对应多行食材记录,我们只需要唯一的食谱名。

方式2:用GROUP BY+HAVING统计过滤

通过分组统计每个食谱的鸡蛋出现次数,过滤掉次数大于0的食谱:

SELECT Recipename
FROM recipe
GROUP BY Recipename
HAVING SUM(CASE WHEN IngredientName = '鸡蛋' THEN 1 ELSE 0 END) = 0;

解释一下:分组后,CASE语句会把鸡蛋食材标记为1,其他为0,求和后如果等于0,说明这个食谱完全没用到鸡蛋,符合我们的要求。

为啥你之前的查询不对?

估计你之前写的是类似这样的语句:

SELECT DISTINCT Recipename
FROM recipe
WHERE IngredientName != '鸡蛋';

这会把两个食谱都返回,因为“Kitchen Sink Cookies”里除了鸡蛋还有16种其他食材,这些行都会被这条语句选中,所以这个食谱名依然会出现在结果里——这就是问题的根源!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:41