2014-11-04 53 views
0

我做了一个表像将选择总是与第一(最早)记录在表

record 
----------+ 
1 | one | 
----------+ 
2 | two | 
----------+ 
3 | three | 
----------+ 
4 | four | 
----------+ 
5 | five | 
----------+ 

开始没有一个ID列,这些都只是行号我看到DBVisualizer工具中的每一行旁边。我加入的顺序1,2,3,4行,5这是”

SELECT 
    * 
FROM 
    sch.test_table limit 1; 

一定总是得到one,即与启动‘最老’的记录吗?或者是将大型数据集这种变化?

+0

通过在查询中添加一个ORDER BY来显式执行它可能会更好。 – user3557327 2014-11-04 22:57:03

+1

如果您没有提供ORDER BY子句,则服务器可以自由返回想要提供的任何行。如果你依赖于获得最近的,请添加一个'ORDER BY'。 – 2014-11-04 22:57:29

+1

行没有任何顺序。如果您需要某个订单,您可以使用'order by' – 2014-11-04 22:57:56

回答

2

没有,按照SQL规范不使用order by时的顺序是不确定的。你跟一组数据的工作,并集是没有顺序的。此外,集合的大小不应该的问题。

Postgresql documentation说:

如果未给出ORDER BY,则系统会以系统发现速度最快的顺序返回行。

这意味着行可能按照预期顺序返回,或者它们可能不会 - 无法保证。

底线是,如果你想确定性的结果,你必须使用order by

+0

在这个例子中,这不会给我一个按字母顺序排列的列表吗?有没有办法让他们进入命令? – 1252748 2014-11-04 23:21:50

+1

@ thomas这将是按字母顺序的是。如果没有其他专栏来订购,没有稳定的方式来获得您想要的订单。 Postgresql有一些系统特定的东西,你可能会滥用(请参阅此问题的详细信息:https://stackoverflow.com/questions/17500013/in-order-sequence-generation)。 – jpw 2014-11-04 23:26:28