*****注:IMO,这不是重复的***** 有多个问题显示相同的示例查询语句,但这些问题与选择随机行有关。他们没有解释SYNTAX上的order by子句如何允许使用Select部分中不存在的列,尽管他们解释了随机生成是如何工作的。如果上述查询按列表顺序使用tan(45)之类的函数,它将无法正常工作。那么,什么决定了:a)ORDER by子句中允许哪些功能? b)为什么在后台将某些功能添加到选择列表中,而有些却没有。
即使列不在选择列表中,SQL Server如何允许通过newid(),rand()函数进行排序? 注意:我的问题不是关于如何生成随机数。
通过newid()从mytable顺序中选择前1个*
SQL服务器规则特别声明:
ORDER BY子句中引用的列名称必须与 选择列表中的列或表中定义的列 在FROM子句中指定,没有任何歧义。
如果它们是一种豁免,那么周围是否有特定的规则,以便我们知道如何在其他情况下进一步使用它们?
答案 0 :(得分:1)
这是您的查询:
<a id="details" data-value="thevalue">click for details</a>
select top 1 t.*
from mytable
order by newid();
没有对列的引用。它仅具有一个不引用任何列的函数调用。因此,没有问题。
通过比较,您可以在order by
中加入newid()
:
select
在这种情况下,select top 1 t.*, newid() as newid
from mytable
order by newid;
将引用newid
中的别名。 (因此这也是允许的;仅用于比较。)