我在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 ;?的含义是什么? (没有此关键字有错误)。 谷歌没有说什么。
答案 0 :(得分:4)
linevals
是查询(select price*quantity...date_from)
形成的alias的derived 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
在我的子查询
之后