保存从DB检索数据的顺序

时间:2018-05-28 08:28:55

标签: sql postgresql

我有这个问题:

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"

我想从嵌套查询返回时获取id:

select contributor_id from procedure_contributor where procedure_id = 13 

返回:

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

有办法吗?

2 个答案:

答案 0 :(得分:0)

呃,一种方法是在你的子查询中添加一个row_number()。 'IN'将不再有效,因此您需要加入它然后通过此row_number()进行排序。

但实际上,您只是以随机顺序显示结果。下次运行此查询时,您可以按其他顺序获取商品。因此,正确的解决方法是通过添加订单并对所需的列进行排序。

答案 1 :(得分:0)

不会从子查询中以任何顺序返回值。关系数据库中的行不是“已排序”的。没有数据库的订单可以按照它认为合适的任何顺序自由返回。并且主查询无论如何都将忽略用于IN的子查询中的顺序。您可以保证特定排序顺序的唯一(真正:唯一)方式是使用订单。您需要贡献者中的列才能进行排序。或者在procedure_contributor中有一个 - 但是你需要一个连接才能对外部查询进行排序

*这是@ a_horse_with_no_name的评论!