目的是查询所有CITIES,并且其开头和结尾字母均为元音。我尝试了下面的似乎无效的代码。您能解释为什么它不起作用吗?有更好的方法吗?
我试图首先获取以元音结尾的城市,然后尝试将其用作选择以元音开头的城市的子查询,如下所示:
我已经尝试实现此代码:
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%'
AND CITY IN (
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'
);
所需的输出如下:
Oslo
Upperco
Amazonia
...
...
...
我得到这些作为输出,以及那些没有以元音结尾的城市,如:
Arlington
Albany
Upperco
Aguanga
Odin
East China
Algonac
Onaway
Irvington
Arrowsmith
Oakfield
Elkton
East Irvine
Amo
...
...
...
答案 0 :(得分:0)
更好的方法可能是使用REGEXP
:
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou].*[aeiou]$';
请注意,REGEXP
不区分大小写,因此我们只需要在正则表达式的单个情况下使用[aeiou]
。
您当前的查询实际上在逻辑上是正确的,但是由于对AND
和OR
的使用/理解不正确,因此您不会得到想要的行为。 AND
的优先级比OR
高,因此查询中缺少括号。试试这个版本:
SELECT DISTINCT CITY
FROM STATION
WHERE
(LOWER(CITY) LIKE 'a%' OR
LOWER(CITY) LIKE 'e%' OR
LOWER(CITY) LIKE 'i%' OR
LOWER(CITY) LIKE 'o%' OR
LOWER(CITY) LIKE 'u%') AND
(LOWER(CITY) LIKE '%a' OR
LOWER(CITY) LIKE '%e' OR
LOWER(CITY) LIKE '%i' OR
LOWER(CITY) LIKE '%o' OR
LOWER(CITY) LIKE '%u') ;