SQL如何在WHERE子句中过滤返回符合指定规则的数据子集?
多条件SQL过滤实现方案
你原来的IF语句报错是因为标准SQL中IF函数需要传入3个参数(判断条件、条件成立返回值、条件不成立返回值),你只补了前两个参数导致逻辑不完整。你不需要用CTE或者UNION,直接用基础逻辑运算符组合就可以实现需求,写法更简洁:
SELECT * FROM 你的表名 WHERE Name LIKE 'Cat1%' AND ( Name != 'Cat1_subcat1' OR Value > 5 );
逻辑说明:
- 先用
Name LIKE 'Cat1%'筛出所有归属于Cat1的行 - 括号内的条件做二次过滤:如果当前行不是
Cat1_subcat1,直接符合条件;如果是Cat1_subcat1,则需要满足Value大于5的要求,完全匹配你的过滤规则。
如果你偏好使用IF函数写法,补全参数即可正常运行:
SELECT * FROM 你的表名 WHERE Name LIKE 'Cat1%' AND IF(Name = 'Cat1_subcat1', Value > 5, TRUE);
用你提供的样表数据做验证,最终返回结果如下:
| Name | Value |
|---|---|
| Cat1_subcat1 | 10 |
| Cat1_subcat2 | 5 |
内容的提问来源于stack exchange,提问作者messy748
相关产品推荐
相关产品推荐

