何时返回确定性结果,何时返回?

6 sybase

如果你执行这样的语句:

select first field1, field2 from exampleTable where field1 = '1';
Run Code Online (Sandbox Code Playgroud)

然后你会收到这样的警告:

返回的结果是不确定的 SQLCode=122

到目前为止一切正常,因为在这种情况下,您需要一个“order by”子句。

但是当你在 BEGIN END 块中使用相同的语句将值放入一些声明的变量中时,

BEGIN
declare varField1 varchar;
declare varField2 varchar;

select first field1, field2 into varField1, varField2 
from exampleTable 
where field1 = '1';

END
Run Code Online (Sandbox Code Playgroud)

警告没有出现!为什么?

这里不需要“order by”子句吗?这个陈述是突然确定的吗?...

(使用 SQL Anywhere 12)

Jam*_*yan 4

在 SQL 中,行不以任何特定顺序返回(实际上,它们在大多数情况下可能以相同的顺序),因此如果没有 ORDER BY,任何行都可能首先返回。因此它是不确定的,因为每次运行查询时第一条记录都会发生变化。

将其包装在块中并不会使答案具有确定性,它只是隐藏了警告。