每次运行SQL查询时SQL检查前100行不同?

时间:2014-05-09 19:52:01

标签: sql sql-server database sql-server-2008 netezza

我是SQL新手。

我使用“order by”对SQL上的两个大表进行排序,IBM的netezza。

表格是:

 col1  INT
 col2  INT
 col3  INT
 col4  DOUBLE PRECISION

 INSERT INTO mytable
 SELECT * 
 FROM table1 AS t1
 ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4 ASC

排序后,我检查前100行:

SELECT *
FROM mytable
LIMIT 100;

但是,每次运行前100行的SQL查询时,我都得到了不同的结果。

当我将表导出到txt文件时,同样的事情。

为什么?

谢谢!

5 个答案:

答案 0 :(得分:4)

将数据插入表中的顺序毫无意义。除非使用order by子句显式指定行,否则运行查询绝对不能保证返回的行顺序。由于不保证行的顺序,因此无法保证"前100"是的,因此每次运行查询时都可能得到不同的结果。

但是,如果确实在查询中指定了顺序,则应该得到一致的结果(假设前100行只有一个可能的结果,而不是,例如200行,其中任何100行可以被认为是有效的结果):

SELECT   *
FROM     mytable
ORDER BY col1, col2, col3, col4 ASC
LIMIT    100;

答案 1 :(得分:1)

虽然序列可能与插入数据的顺序相匹配,但不保证序列。如果您需要按特定顺序使用它,请使用ORDER BY。

答案 2 :(得分:1)

你需要将order by用于select查询,并且在order by子句之后不必强制写 ASC ,因为默认排序将按升序排列

SELECT *
FROM mytable t1
ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4 
LIMIT 100;

答案 3 :(得分:0)

您需要将order by应用于Select声明

答案 4 :(得分:0)

ORDER BY也属于SELECT查询:

SELECT *
FROM mytable t1
ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4 ASC
LIMIT 100;