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

如何用IN或ANY运算符替换多OR语句查询不重复元音结尾城市

解决方案:用IN或ANY实现以元音结尾的不重复城市查询

没问题,我帮你把原查询改写成更简洁的IN或ANY版本,两种写法都能达到和你原有语句相同的效果:

方法1:使用IN运算符

这种写法最简洁,通过提取城市名的最后一个字符,直接判断它是否在元音集合中:

SELECT DISTINCT City 
FROM Station 
WHERE RIGHT(City, 1) IN ('a', 'e', 'i', 'o', 'u');

说明:

  • RIGHT(City, 1) 函数用于截取城市名的最后一个字符(不同数据库的等价函数:MySQL、PostgreSQL、SQL Server都支持RIGHT(),Oracle可以用SUBSTR(City, -1))。
  • 如果你的数据库对大小写敏感(比如城市名可能以大写元音结尾,如"Phoenix"),可以把截取的字符转成小写来兼容:
    SELECT DISTINCT City 
    FROM Station 
    WHERE LOWER(RIGHT(City, 1)) IN ('a', 'e', 'i', 'o', 'u');
    

方法2:使用ANY运算符

ANY需要配合子查询来构造元音列表,适合需要动态生成条件的场景:

SELECT DISTINCT City 
FROM Station 
WHERE RIGHT(City, 1) = ANY (
    SELECT v 
    FROM (VALUES ('a'), ('e'), ('i'), ('o'), ('u')) AS vowels(v)
);

说明:

  • 这里我们先通过VALUES子句构造了一个包含所有元音的临时表vowels,然后用= ANY判断城市名的最后一个字符是否等于临时表中的任意一个元音值。
  • 同样,若需要兼容大小写,加上LOWER()即可:
    SELECT DISTINCT City 
    FROM Station 
    WHERE LOWER(RIGHT(City, 1)) = ANY (
        SELECT v 
        FROM (VALUES ('a'), ('e'), ('i'), ('o'), ('u')) AS vowels(v)
    );
    

两种写法都能替代你原来的多个LIKE OR的逻辑,代码更简洁易维护,尤其是当需要调整元音列表时,只需要修改集合或临时表的内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:42:41