反转SELECT语句的初始顺序

chr*_*ris 1 sql postgresql sql-order-by

我想在Postgres中运行一个SQL查询,它与你在没有order by子句的情况下运行初始查询所获得的完全相反.

因此,如果您的查询是:

SELECT * FROM users 
Run Code Online (Sandbox Code Playgroud)

然后

SELECT * FROM users ORDER BY <something here to make it exactly the reverse of before>
Run Code Online (Sandbox Code Playgroud)

它会这样吗?

ORDER BY Desc
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

您正在构建错误的假设,即您将以确定的顺序获取行:

SELECT * FROM users;
Run Code Online (Sandbox Code Playgroud)

你得到的是任意的.Postgres以其认为合适的任何方式返回行.对于简单查询,通常按其物理存储顺序排列,通常是输入行的顺序.但是没有保证,它可能会在两次调用之间的任何时间发生变化,例如当后台进程重新排序行时 - 就像VACUUM.或者更复杂的查询可能会根据索引或连接返回行.简而言之:关系数据库中的表行没有可靠的顺序,除非您指定它ORDER BY.

也就是说,假设您按照物理存储的顺序从上面的简单查询中获取行,这将使您获得相反的顺序:

SELECT * FROM users
ORDER  BY ctid DESC;
Run Code Online (Sandbox Code Playgroud)

ctid是表示物理顺序的内部元组ID.有关:

  • 当你说对的时候,有点奇怪的是你投了票,是吗? (2认同)