SQL中针对单列的多个OR等值WHERE条件有没有简写方式?
简洁写法实现方案
你要的简化逻辑可以直接用SQL标准语法里的IN操作符实现,完全可以替代反复写UPPER(column) = 某值拼接OR的冗长写法。
正确等价写法
原来的多OR拼接语句:
SELECT * FROM users WHERE UPPER(column) = 'STRING1' OR UPPER(COLUMN) = 'STRING2' OR UPPER(COLUMN) = 'STRING3' OR ... OR UPPER(COLUMN) = 'ANYSTRING';
可以简化为如下形式,执行逻辑和原语句完全等价:
SELECT * FROM users WHERE UPPER(column) IN ('STRING1', 'STRING2', 'STRING3', ... , 'ANYSTRING');
注意事项
IN后面的匹配值列表用英文逗号分隔,不需要写OR,只要列值在这个列表里就会满足匹配条件,和你预期的「等于列表中任意一个值就命中」的逻辑完全一致。- 你设想的
UPPER(column) = ('STRING1' OR 'STRING2' OR ...)写法不符合SQL语法规范,括号内的OR会被解析为布尔逻辑运算,无法实现等值匹配效果,不要使用。 - 这种写法是ANSI SQL标准语法,所有主流关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server等)都原生支持,不存在兼容性问题。
- 如果后续匹配值数量特别多,还可以根据场景把匹配值存到临时表做JOIN匹配,但就简化日常多值OR等值判断的需求来说,
IN是最方便直接的方案。
内容的提问来源于stack exchange,提问作者g00dds
相关产品推荐
相关产品推荐

