SQL Server“linevals”关键字

时间:2014-05-16 15:16:46

标签: sql sql-server-2008

我在Northwind DB上做了一些小练习:

update orders set totalvalue = (select sum(odvalue)
from
(select price*quantity as odvalue
from [order details] od join pricelist pl on od.productid=pl.productid
where od.orderid=orders.orderid and orderdate<date_to and
orderdate>=date_from) linevals)

&#34; linevals&#34 ;?的含义是什么? (没有此关键字有错误)。 谷歌没有说什么。

4 个答案:

答案 0 :(得分:4)

linevals是查询(select price*quantity...date_from)形成的aliasderived table

可以说这可以用这种方式更明确地写出来:as linevals

答案 1 :(得分:1)

它是内部查询的别名,语法

是必需的

每当你在from子句中有一个子查询时,它必须有一个像

这样的别名
SELECT *
FROM 
   ( SELECT * FROM TABLEA) A --<-- This A is the alias for this sub-query

答案 2 :(得分:1)

在原始查询中,linevals称为别名。在这种情况下,它是一个表/子查询别名,因为它是子查询的名称。这样,SQL Server就可以识别哪些列来自哪些表。

通常,对表别名使用表缩写是个好主意 - 也就是说,有意义的短名称。我注意到你已经遵循了这个最佳实践。

您不需要子查询。这是一个更容易阅读的版本:

update orders o
    set totalvalue = (select sum(price*quantity) as odvalue
                      from [order details] od join
                           pricelist pl
                           on od.productid = pl.productid
                      where od.orderid = orders.orderid and
                            orderdate < date_to and
                            orderdate >= date_from
                     );

这也具有可以在更多数据库中使用的优点。例如,Oracle和MySQL不允许在嵌套子查询中使用相关条件。

答案 3 :(得分:0)

它是内部查询的名称。

它不需要是任何特定的单词。我通常会写

as x

在我的子查询

之后