Pan*_*kaj 4 sql-server subquery sql-order-by
在子查询中使用order by时会抛出错误:例如:
set rowcount 10
select * from XXX where Col1 in(
select Col2 from YYY
order by Col3 desc
)
Run Code Online (Sandbox Code Playgroud)
想了解为什么在SQL-Server中限制这种类型的查询?抛出的错误是:
除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
为什么?
简答:
因为集合没有订单.
更长的答案:
SQL是Relational Calculus的一个实现,它基于元组集(表,行集等).集合没有任何顺序(与相关概念不同,列表是带有排序的集合).
此外,(通常)在最终输出之前对一组进行排序没有任何好处,并且造成相当大的伤害,因为:
通常有意义的唯一地方是最终输出,因为无论如何数据必须在那里连续传输.
在最终输出之前唯一有意义的地方是TOP (N)需要排序以确定哪些行是"顶部"行的事情.
它对某些Aggregate函数也有意义,这就是为什么它们中的许多都有自己的 ORDER BY子句.还用于在中间阶段构造XML结果.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |