我有这个问题:
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可能是。换句话说,订单受到干扰(每次都不一致)。
可能的原因是什么?因为索引还是什么?我不确定为什么会这样。请指导我
答案 0 :(得分:3)
由于您没有指定显式ORDER BY
子句,因此无排序(这是任何RDBMS的默认行为)。
数据引擎以任何方式返回数据。这个可能看起来有序 - 但不能保证 - 下次运行查询(没有ORDER BY
)时,返回的结果可能采用不同的顺序。< / p>
如果您需要订购 - 必须指定ORDER BY
条款!
请参阅Alexander Kuznetsov撰写的这篇博文Without ORDER BY, there is no default sort order,其中包含一个很好的简单repro脚本,用于演示这一事实 - 没有ORDER BY
==没有默认排序....