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

HackerRank Weather Observation Station 11 SQL查询异常问题咨询

问题原因
  • 运算符使用错误:IN/NOT IN仅支持精确值匹配,无法识别%通配符的模糊匹配规则。你写的CITY NOT IN ('%a','%e','%i','%o','%u')实际是判断城市名是否完全等于%a这类带百分号的字符串,几乎不会命中任何数据,导致该条件恒为真,配合OR逻辑会让整个筛选条件永久生效,返回全部城市。
  • 逻辑优先级隐患:即使替换为正确的模糊匹配运算符,OR的运算优先级低于AND,如果不加括号区分条件块,也会出现逻辑判断错误。
修正方案

有两种主流实现方式,均符合题目要求:

方案1:直接匹配题目逻辑

用NOT LIKE替换NOT IN实现模糊匹配,用括号区分两个条件块避免优先级问题:

SELECT DISTINCT CITY 
FROM STATION 
WHERE 
  (CITY NOT LIKE 'a%' AND CITY NOT LIKE 'e%' AND CITY NOT LIKE 'i%' AND CITY NOT LIKE 'o%' AND CITY NOT LIKE 'u%')
  OR
  (CITY NOT LIKE '%a' AND CITY NOT LIKE '%e' AND CITY NOT LIKE '%i' AND CITY NOT LIKE '%o' AND CITY NOT LIKE '%u');

方案2:逻辑简化版

根据德摩根定律,「要么不以元音开头、要么不以元音结尾」等价于「排除同时以元音开头且以元音结尾的城市」,写法更简洁,执行效率更高:

SELECT DISTINCT CITY 
FROM STATION 
WHERE NOT (
  (CITY LIKE 'a%' OR CITY LIKE 'e%' OR CITY LIKE 'i%' OR CITY LIKE 'o%' OR CITY LIKE 'u%')
  AND
  (CITY LIKE '%a' OR CITY LIKE '%e' OR CITY LIKE '%i' OR CITY LIKE '%o' OR CITY LIKE '%u')
);

如果使用支持正则匹配的数据库(如MySQL),还可以用正则进一步简化写法:

SELECT DISTINCT CITY FROM STATION WHERE CITY NOT REGEXP '^[aeiou].*[aeiou]$';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:00