首页 > 解决方案 > Redshift:使用另一个带有 JOIN 的表与没有 JOIN 的表更新一个表

问题描述

我想用 tableB 中的相应值更新 tableA 的某些列。

以下两个更新查询是否等效?(第一个查询是否使用隐式 JOIN?)

查询 1(没有显式 JOIN):

UPDATE tableA
SET col1 = tb.col1, col2 = tb.col2
FROM tableB tb
WHERE tb.col3 = tableA.col3

查询 2(显式 JOIN):

UPDATE tableA
SET col1 = tb.col1, col2 = tb.col2
FROM tableB tb JOIN tableA ta ON ta.col3=tb.col3

标签: sqlamazon-redshift

解决方案


这些表是等价的。

第二个查询有两个单独的引用TableAtableAin theupdate和从句之间没有关联FROM子句。因此,每一行都将尝试使用该子句产生的所有行进行更新。FROM

毫无疑问,您打算使用第一个版本。

另请注意,在 SQL Server 中,这两者是等价的——即使使用ta表别名也是如此。SQL Server 忽略了这一点。


推荐阅读