Coxer Asked: 2019-07-25 06:19:50 +0800 CST2019-07-25 06:19:50 +0800 CST 2019-07-25 06:19:50 +0800 CST PostgreSQL 的 WHERE IN 结果顺序 772 如果我使用以下选择 SELECT * FROM users WHERE id IN (3,1,2) 我可以期望结果与提供的 ID 的顺序相同吗? postgresql where 3 个回答 Voted Phill W. 2019-07-25T06:28:54+08:002019-07-25T06:28:54+08:00 简短的回答:没有。 保证返回的行顺序的唯一方法是通过“order by”子句。 您几乎无法控制数据库如何选择“获取”您的任何数据,因此也无法控制它获取这些记录的顺序。 你可能会很幸运,事情可能会按照你想要的顺序出现......但不要依赖它。 Best Answer Muab Nhoj 2019-07-25T06:35:12+08:002019-07-25T06:35:12+08:00 不,SQL 是一种声明性语言,而不是程序性语言(大部分情况下),因此您只需声明您想要的信息,然后优化器决定如何获取它以及返回什么顺序,除非您指定。 a_horse_with_no_name 2019-07-25T08:42:50+08:002019-07-25T08:42:50+08:00 正如其他人正确写的那样:不,您不能依赖任何订单,除非您使用 `order by 但是,如果由于某种原因,您需要按照指定参数的顺序获取结果,则需要使用不同的查询: SELECT u.* FROM users u JOIN unnest(array[3,1,2]) with ordinality as l(id, idx) ON u.id = l.id ORDER BY l.idx; 创建一个列,该unnest() with ordinality列指示值在数组中的原始位置,然后可以在order by. IN请注意,如果该列表中可能出现重复值,这将与运算符不同。连接将从users表中返回这些行两次,IN而不会。
简短的回答:没有。
保证返回的行顺序的唯一方法是通过“order by”子句。
您几乎无法控制数据库如何选择“获取”您的任何数据,因此也无法控制它获取这些记录的顺序。
你可能会很幸运,事情可能会按照你想要的顺序出现......但不要依赖它。
不,SQL 是一种声明性语言,而不是程序性语言(大部分情况下),因此您只需声明您想要的信息,然后优化器决定如何获取它以及返回什么顺序,除非您指定。
正如其他人正确写的那样:不,您不能依赖任何订单,除非您使用 `order by
但是,如果由于某种原因,您需要按照指定参数的顺序获取结果,则需要使用不同的查询:
创建一个列,该
unnest() with ordinality
列指示值在数组中的原始位置,然后可以在order by
.IN
请注意,如果该列表中可能出现重复值,这将与运算符不同。连接将从users
表中返回这些行两次,IN
而不会。