сохранить порядок при получении данных из БД - PullRequest
0 голосов
/ 28 мая 2018

У меня есть этот запрос:

select id, name 
from contributor 
where id in (select contributor_id 
             from procedure_contributor 
             where procedure_id = 13);

этот запрос возвращает:

id   name
_____________
25  "Steven"
5   "Sergio"
4   "Nadine"
21  "Sami"
3   "Nicolas"
23  "Samuel"
17  "Sarrah"
22  "Andrea"
24  "Ramos"

Я хочу получить идентификаторы, поскольку они возвращаются из вложенного запроса:

select contributor_id from procedure_contributor where procedure_id = 13 

, который возвращает:

contributor_id 
________________
"3"
"22"
"17"
"4"
"5"
"21"
"23"
"24"
"25"

Есть ли способ для этого?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Значения не возвращаются ни в каком порядке из подзапроса.Строки в реляционной базе данных НЕ «сортируются».Без заказа по базе данных можно свободно возвращать их в любом порядке, который он сочтет нужным.И порядок в подзапросе, используемом для IN, в любом случае будет игнорироваться основным запросом.Единственный (на самом деле: единственный) способ гарантировать определенный порядок сортировки - это использовать порядок по.Для сортировки вам также нужен столбец в contributor.Или один в method_contributor - но тогда вам нужно объединение, чтобы иметь возможность сортировать внешний запрос

* это комментарий @ a_horse_with_no_name!

0 голосов
/ 28 мая 2018

Тьфу, один из способов сделать это - добавить row_number () в ваш подзапрос.«IN» больше не будет работать, поэтому вам нужно присоединиться к нему, а затем упорядочить по этому row_number ().

Но на самом деле вы просто показываете свои результаты в случайном порядке.В следующий раз, когда вы запустите этот запрос, вы можете получить ваши предметы в другом порядке.Поэтому правильное решение - добавить порядок и отсортировать по нужному столбцу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...