更新查询语句

时间:2021-01-08 17:35:49

标签: sql sql-server syntax sql-update

我发现了一些奇怪的东西

Update **X** SET field = 'bla'
from **X**

...这真的没有意义

3 个答案:

答案 0 :(得分:1)

这种通用语法通常用于在更新时连接表(即,您希望根据表 t2 中的 c2 列更新表 t1 中的 c1 列)。一般为

UPDATE 
    t1
SET 
    t1.c1 = t2.c2, -- Just an example
    t1.c3 = 'something else' -- etc...
FROM 
    t1
[INNER | LEFT] JOIN t2 ON join_condition

在你的例子中,你没有 join 子句,所以它可能看起来有点滑稽,但正如你所指出的,这是有效的语法。

答案 1 :(得分:1)

首先要了解的是 UPDATE 语句也可能使用 JOIN 之类的功能,其中存在多个表。所以你可以有这样的东西:

UPDATE X
SET col1 = Y.colA
FROM X
INNER JOIN Y ON X.col2 = y.colB

现在我们有两个表,所以 X 旁边的 UPDATE 告诉我们我们要定位哪个表。

当然,我们仍然更喜欢 X.col1 而不是 col1 子句中的 SET。进行该更改后,X 关键字旁边的 UPDATE 似乎又显得多余了。但是,在同一个语句中定位两个表是不合法的。因此,X 旁边的 UPDATE 告诉服务器在 SET 子句中哪些引用是合法目标。这在使用别名时特别有用(您几乎应该总是这样做):

UPDATE x
SET x.col1 = y.colA, x.col3 = y.colC
FROM VeryLongTableNameA x
INNER JOIN VeryLongTableNameB y ON x.col2 = y.colB

从技术上讲,您仍然可以简化语言以删除 X 旁边的 UPDATE。查询编译器可以根据 SET 子句推断目标,多个或不明确的目标将无法编译,从而产生语法错误。但这不是语言的工作方式。当您希望完整查询通常在个位数毫秒内完成时,让编译器更轻松一点确实有价值。

答案 2 :(得分:0)

什么没有意义?

这是关于 updateX 声明。 X 中的 update x 实际上是由 from 子句定义的表别名。