【发布时间】:2020-04-05 04:42:27
【问题描述】:
我正在hackerrank.com 上做练习(SQL 初学者练习),我相信你们中的许多人都很熟悉。
这是问题:
从 STATION 查询不以元音开头且不以元音结尾的 CITY 名称列表。您的结果不能包含重复项。
我的回答如下:
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%'
AND city NOT LIKE '%a'
AND city NOT LIKE '%e'
AND city NOT LIKE '%i'
AND city NOT LIKE '%o'
AND city NOT LIKE '%u'
我知道这是一种荒谬的做法——你们能就如何缩短它提供建议吗?我目前对 SQL 的了解还不够,无法使其更简洁。如果您可以展示几种方法来解决它,那将非常有帮助。
【问题讨论】:
-
请用您正在使用的数据库标记您的问题:mysql, sql-server, oracle, ...?字符串函数是非常特定于数据库的。
-
其实这个SQL查询还不错。在 Oracle 或 SQL Server 中,这可能会执行接近最佳查询,具体取决于 [station] 表的大小。
-
DISTINCT 不是函数,它是
SELECT DISTINCT的一部分!删除那些多余的括号,只需执行SELECT DISTINCT city FROM station...即可使代码更清晰。 -
您目前的方法有什么问题?还不够吗?
标签: mysql sql string substring where-clause