相同查询的记录结果顺序的差异

时间:2014-09-24 09:14:44

标签: sql database

我有这个问题:

SELECT -- some columns -- 
FROM ABC 
     INNER JOIN DEF ON DEF._VALUE = SUBSTRING(ABC._VALUE, 1, 6) 
     INNER JOIN GHI ON GHI.CODE = DEF.CODE 
     LEFT OUTER JOIN DC ON DC.PAN = ABC.PAN 
     LEFT OUTER JOIN BR ON BR.NAME = DC.NAME 
WHERE ABC.RECEIVED_DATE >= CONVERT(DATETIME,'2014-01-01 00:00:00',120) 
      AND ABC.RECEIVED_DATE <= CONVERT(DATETIME,'2014-01-10 23:59:59',120) 
      AND ('-1' IN ('-1') OR ABC.ID IN ('-1')) 
      AND ('-1' IN ('2012') OR BR.NAME IN ('2012')) 
      AND ABC.PAN LIKE '%' + '%' + '%' 
      AND DC.RL LIKE '%' + '%' + '%' 
      AND (ABC.RC = '1') 

每次点击数据库时,它都会获得相同的记录(例如15个)记录,但每次记录的ORDER都不同。就像在第一次尝试中显示为记录#-1的记录在第二次尝试中显示记录#-6可能是。换句话说,订单受到干扰(每次都不一致)。

可能的原因是什么?因为索引还是什么?我不确定为什么会这样。请指导我

1 个答案:

答案 0 :(得分:3)

由于您没有指定显式ORDER BY子句,因此无排序(这是任何RDBMS的默认行为)。

数据引擎以任何方式返回数据。这个可能看起来有序 - 但不能保证 - 下次运行查询(没有ORDER BY)时,返回的结果可能采用不同的顺序。< / p>

如果您需要订购 - 必须指定ORDER BY条款!

请参阅Alexander Kuznetsov撰写的这篇博文Without ORDER BY, there is no default sort order,其中包含一个很好的简单repro脚本,用于演示这一事实 - 没有ORDER BY ==没有默认排序....