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

SQL查询添加标题含指定词汇的WHERE子句报错求助

嘿,我来帮你搞定这个SQL语法问题!你遇到的错误核心是重复使用了WHERE关键字——SQL里一个SELECT语句只能有一个WHERE子句,所有过滤条件都得用AND/OR这类逻辑运算符放在同一个子句里,不能重复写WHERE。

另外还要注意AND和OR的优先级问题,不加括号的话,AND会比OR先执行,很可能导致你的查询逻辑和预期不符。下面分两种常见需求给你正确的写法:

需求1:同时满足原有条件 + 标题包含指定词汇

比如你要找program_type_id为2、关联食谱可用并且标题包含“烘焙”的记录,写法如下(把%烘焙%替换成你要的指定词汇,%是SQL里的通配符,代表任意长度的字符):

SELECT * 
FROM program_recipes ptr 
LEFT JOIN recipes r ON ptr.recipe_id = r.id 
WHERE ptr.program_type_id IN (2) 
  AND r.available = 1 
  AND r.title LIKE '%烘焙%';

这里提一句:因为你加了r.available = 1,原本的左连接其实已经和内连接效果一致了——左连接中没有匹配到食谱的program_recipes记录,r.available会是NULL,NULL = 1不成立,会被过滤掉。如果你不需要保留这类无匹配的记录,也可以直接写成内连接:

SELECT * 
FROM program_recipes ptr 
INNER JOIN recipes r ON ptr.recipe_id = r.id 
WHERE ptr.program_type_id IN (2) 
  AND r.available = 1 
  AND r.title LIKE '%烘焙%';

需求2:满足原有条件 或者 标题包含指定词汇

如果你的逻辑是“符合原有筛选规则,或者标题包含指定词汇”,一定要用括号把原有条件括起来,保证逻辑优先级:

SELECT * 
FROM program_recipes ptr 
LEFT JOIN recipes r ON ptr.recipe_id = r.id 
WHERE (ptr.program_type_id IN (2) AND r.available = 1) 
   OR r.title LIKE '%烘焙%';

这里要注意:左连接中没有匹配到食谱的记录,r.title会是NULL,NULL LIKE '%xxx%'不会成立,所以这类记录不会被选中。如果需要调整这个逻辑,可以再针对性修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:46:34