*注意: IMO,这不是重复的*有多个问题显示了相同的示例查询语句,但这些问题是关于选择随机行的。它们没有具体解释order by子句如何允许使用Select part中没有的列的语法,尽管它们解释了随机生成是如何工作的。如果上面的查询在order by列表中使用像tan(45)这样的函数,它将不起作用。那么,是什么决定了,a) ORDER by子句中允许哪些函数?b)以及为什么一些函数被添加到后台的选择列表中,而一些函数没有被添加到后台。
SQL server如何允许按newid()、rand()函数排序,即使该列不在select列表中?注意:我的问题不是关于如何生成随机数。
从mytable中选择top 1* order by newid()
SQL server规则明确规定:
ORDER BY子句中引用的列名必须对应于select列表中的列,或者对应于FROM子句中指定的表中定义的列,并且不能有任何歧义。
如果它们是免责条款,是否有具体的规则,以便我们知道如何在其他场景中进一步使用它们?
发布于 2018-10-18 10:26:50
这是您的查询:
select top 1 t.*
from mytable
order by newid();
order by
没有对列的引用。它只有一个没有引用任何列的函数调用。所以,没有问题。
相比之下,您可以在select
中包含newid()
select top 1 t.*, newid() as newid
from mytable
order by newid;
在这种情况下,newid
将引用select
中的别名。(因此,这也是允许的;它仅用于比较。)
https://stackoverflow.com/questions/52864537
复制相似问题