首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有所需顺序的联合查询

具有所需顺序的联合查询
EN

Stack Overflow用户
提问于 2018-05-31 05:52:47
回答 1查看 17关注 0票数 0

我正在使用Postgres,假设我有一个简单的表,如下所示

代码语言:javascript
复制
cities
------------------
id | name
------------------
 1 | San Diego
------------------
 2 | San Antonio
------------------
 3 | Stockholm
------------------
 4 | Helsinki
------------------
 5 | San Francisco
------------------

我希望找到与该模式完全或部分匹配的所有城市。重要的是,精确匹配的城市应该是结果中的第一个。例如,如果我在"San Francisco“中找到city,结果应该是这样的

代码语言:javascript
复制
 -------------------
 id | name
 -------------------
  5 | San Francisco
 -------------------
  1 | San Diego
 -------------------
  2 | San Antonio
 -------------------

重要的是,“旧金山”是结果中的第一个。

我的查询如下所示

代码语言:javascript
复制
 SELECT * FROM cities WHERE name = "San Francisco"
 UNION
 SELECT * FROM cities WHERE name ~* "San|Francisco"

但是这个查询并不能保证所需的顺序。我尝试使用分区来添加row_number()并按它排序。

代码语言:javascript
复制
WITH cities_with_rows_number AS (
   SELECT *, 0 as row_number FROM cities WHERE name = "San Francisco"
   UNION
   SELECT *, row_number() OVER() as row_number FROM cities WHERE name ~* "San|Francisco"
) SELECT * FROM cities_with_rows_number ORDER BY row_number

但在这种情况下,我不能轻易删除重复的城市和“旧金山”将被打印两次。我相信可以编写非常简单的查询来解决这个任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 05:55:09

您可以使用order by

代码语言:javascript
复制
SELECT *
FROM cities
WHERE name ~* 'San|Francisco'
ORDER BY (name = 'San Francisco')::int DESC;

此查询不需要UNION/UNION ALL

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50613841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档