Snowflake SQL如何修改WHERE子句排除红车仅保留车龄为5的记录
Snowflake查询修改方案
核心逻辑调整
原有规则是全量排除COLOUR含RED的记录,调整后需保留两类数据,其余全部排除:
- 所有COLOUR字段不包含RED的记录
- COLOUR字段包含RED、且AGE字段值等于5的记录
修改后SQL
可读性优先的显式写法(推荐团队协作场景使用,逻辑一目了然,降低后续维护成本):
SELECT * FROM TABLE1 WHERE -- 非红色记录直接保留 COLOUR NOT LIKE '%RED%' -- 红色记录仅保留年龄等于5的条目 OR (COLOUR LIKE '%RED%' AND AGE = 5);
简化写法
通过逻辑代数化简,上述条件可以省略重复的LIKE判断,执行效果完全一致:
SELECT * FROM TABLE1 WHERE COLOUR NOT LIKE '%RED%' OR AGE = 5;
注意:简化写法的逻辑等价性成立的前提是仅当COLOUR含RED时才触发AGE=5的判断,不熟悉逻辑化简的维护人员可能误读为「所有年龄5的记录都保留」,如果团队对SQL可读性要求高,优先选择显式写法。
适配补充
如果表中COLOUR字段存在大小写混合存储的情况(例如值为Red、red),可以将LIKE替换为Snowflake原生支持的大小写不敏感匹配关键字ILIKE,避免漏判。
内容的提问来源于stack exchange,提问作者Justine Mit
相关产品推荐
相关产品推荐

