sql - 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
解决方案
这些表是不等价的。
第二个查询有两个单独的引用TableA
。tableA
in theupdate
和从句之间没有关联FROM
子句。因此,每一行都将尝试使用该子句产生的所有行进行更新。FROM
毫无疑问,您打算使用第一个版本。
另请注意,在 SQL Server 中,这两者是等价的——即使使用ta
表别名也是如此。SQL Server 忽略了这一点。
推荐阅读
- c++ - 如何制作一个接受 2 个参数而不是 1 的递归 lambda 函数?
- oracle - 如何从 SSIS/Visual Studio 建立到 ORACLE 的 ODBC 连接?
- javascript - 您如何判断 HTML5 视频是实时流还是仅来自 Javascript 的视频?
- mongodb - 在保留根字段的同时对子文档进行分组/计数
- testing - SonarQube 不显示 Ruby on Rails 项目的测试代码覆盖率
- jquery - 带有动画的jquery循环,如何等到下一个查询
- python - 在 tkinter 应用程序中将图像添加到按钮的问题
- ruby - 没有文件扩展名的 Ruby Dir.glob 输出
- ios - viewController 的标准方法不叫 Swift
- c++ - 三元运算符的这种解释有效吗?