如何无需多个OR语句实现查询以元音开头的不重复城市名?
问题
我正在完成一项编程挑战,题目要求:从STATION表中查询以元音(即a、e、i、o、u)开头的CITY名称列表,结果不能包含重复值。我已经用以下查询完成了挑战:
SELECT DISTINCT city FROM station WHERE (city LIKE 'a%') OR (city LIKE 'e%') OR (city LIKE 'i%') OR (city LIKE 'o%') OR (city LIKE 'u%');
想知道有没有不用多个OR语句的实现方式?我搜索后发现似乎都需要额外库支持,是这样吗?
回答
当然有不用多个OR的写法,而且完全不需要额外库,不同数据库有对应的原生实现方式:
用LEFT函数配合IN子句
这种写法兼容性极强,几乎所有关系型数据库都支持:SELECT DISTINCT city FROM station WHERE LEFT(city, 1) IN ('a', 'e', 'i', 'o', 'u');核心逻辑就是提取CITY字段的第一个字符,判断它是否在元音字符集合中。
用正则表达式匹配
不同数据库的正则语法略有区别,以下是主流数据库的写法:- MySQL/MariaDB:使用
REGEXP或RLIKE操作符SELECT DISTINCT city FROM station WHERE city REGEXP '^[aeiou]'; - PostgreSQL:使用
~操作符SELECT DISTINCT city FROM station WHERE city ~ '^[aeiou]'; - SQL Server:低版本可以用通配符
LIKE,2017及以上版本支持REGEXP_LIKE
兼容低版本的写法:
2017+版本的正则写法:SELECT DISTINCT city FROM station WHERE city LIKE '[aeiou]%';SELECT DISTINCT city FROM station WHERE REGEXP_LIKE(city, '^[aeiou]');
- MySQL/MariaDB:使用
这些都是数据库原生支持的功能,完全不需要额外引入库。
内容的提问来源于stack exchange,提问作者user28114905
相关产品推荐
相关产品推荐

