首页 > 解决方案 > postgresql 查询以随机顺序返回

问题描述

我正在尝试创建一个 SQL 查询来查询数据库并返回各个机场的信息。

基本查询工作正常,但结果以随机顺序返回。

SELECT * FROM airportdata WHERE airportcode LIKE 'LHR' OR airportcode LIKE 'HKG'

以传递给查询的顺序返回它们非常重要(即,来自 LHR 的机场数据是第一个返回的结果,然后是 HKG 的机场信息),但是我找不到任何可以工作的 ORDER BY。

显然 FIND_IN_SET 是我应该使用的,但是我已经尝试了所有变体,但我无法让它工作!

SELECT * FROM airportdata WHERE airportcode LIKE 'LHR' OR airportcode LIKE 'HKG' ORDER BY FIND_IN_SET(airportcode,'LHR,HKG')

谁能看到我做错了什么?谢谢!

标签: javascriptsqldatabasepostgresql

解决方案


我建议您使用IN. 然后,您可以使用

SELECT *
FROM airportdata
WHERE airportcode IN ('LHR', 'HKG')
ORDER BY position(airportcode in 'LHR,HKG')

(这是安全的,因为机场代码应该是 3 个字符并且没​​有逗号。)

如果你想使用LIKE(它支持通配符),你可以这样做:

SELECT ad.*
FROM airportdata ad JOIN
     (VALUES ('LHR', 1),
             ('HKG', 2)
     ) v(pattern, pos)
     ON v.airportcode LIKE pattern
ORDER BY pos;

这确实存在重复的风险,因为一个代码(理论上)可以匹配多个模式。如果这是一个真正的风险,你需要解释你喜欢哪种模式。


推荐阅读