我正在尝试创建一个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')
有人可以看到我在做什么吗?谢谢!
答案 0 :(得分:2)
我建议您使用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;
这确实存在重复的风险,因为一个代码可以(理论上)匹配多个模式。如果这是真正的风险,则需要解释您喜欢的模式。
答案 1 :(得分:1)
使用此查询:
SELECT *
FROM airportdata
WHERE airportcode LIKE 'LHR' OR airportcode LIKE 'HKG'
ORDER BY CASE WHEN airportcode LIKE 'LHR' THEN 1 ELSE 0 END