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

如何无需多个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
      兼容低版本的写法:
      SELECT DISTINCT city
      FROM station
      WHERE city LIKE '[aeiou]%';
      
      2017+版本的正则写法:
      SELECT DISTINCT city
      FROM station
      WHERE REGEXP_LIKE(city, '^[aeiou]');
      

这些都是数据库原生支持的功能,完全不需要额外引入库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:52:10