SQL Server-按列排序而不选择该列

时间:2018-10-17 22:36:38

标签: sql sql-server syntax

*****注:IMO,这不是重复的***** 有多个问题显示相同的示例查询语句,但这些问题与选择随机行有关。他们没有解释SYNTAX上的order by子句如何允许使用Select部分中不存在的列,尽管他们解释了随机生成是如何工作的。如果上述查询按列表顺序使用tan(45)之类的函数,它将无法正常工作。那么,什么决定了:a)ORDER by子句中允许哪些功能? b)为什么在后台将某些功能添加到选择列表中,而有些却没有。

即使列不在选择列表中,SQL Server如何允许通过newid(),rand()函数进行排序? 注意:我的问题不是关于如何生成随机数。

通过newid()从mytable顺序中选择前1个*

SQL服务器规则特别声明:

  

ORDER BY子句中引用的列名称必须与   选择列表中的列或表中定义的列   在FROM子句中指定,没有任何歧义。

如果它们是一种豁免,那么周围是否有特定的规则,以便我们知道如何在其他情况下进一步使用它们?

1 个答案:

答案 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中的别名。 (因此这也是允许的;仅用于比较。)