我发现了一些奇怪的东西
Update **X** SET field = 'bla'
from **X**
...这真的没有意义
答案 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)
什么没有意义?
这是关于 update
的 X
声明。 X
中的 update x
实际上是由 from
子句定义的表别名。