запрос postgresql, возвращаемый в случайном порядке - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь создать запрос 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')

Кто-нибудь может увидеть, что я делаю не так? Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Я бы порекомендовал вам использовать 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;

Это создает риск дублирования, потому что один код может (теоретически) соответствовать нескольким шаблонам.Если это реальный риск, вам нужно будет объяснить, какой шаблон вы предпочитаете.

0 голосов
/ 26 августа 2018

используйте этот запрос:

SELECT * 
FROM airportdata 
WHERE airportcode LIKE 'LHR' OR airportcode LIKE 'HKG' 
ORDER BY CASE WHEN airportcode LIKE 'LHR' THEN 1 ELSE 0 END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...