postgresql - 为什么在 UPDATE 的 FROM 子句中没有给出连接谓词时 postgres 不抛出错误
问题描述
例如在以下查询中:
UPDATE A
SET A.a = b.id
FROM (SELECT * FROM B) b;
此查询不会引发任何错误。在这种情况下 FROM 做了什么。它是否在 A 和 B 之间进行叉积,然后从 B 中选择一些随机条目?当我解释时,我看不到任何连接,当我在其中添加连接谓词时,就会出现哈希连接。但在这种情况下不是。
只是对功能感到好奇,不打算使用此查询。
解决方案
根据 Postgres 语法,您的查询实际上是一个更新连接,但它缺少WHERE
提供两个表之间连接条件的子句。最有可能的是,您打算使用以下内容:
UPDATE A a
SET A.a = b.id
FROM B b
WHERE a.pk = b.fk; -- join condition is here
就目前而言,表中的每条记录A
都将连接到表中的每条记录B
,因此更新逻辑没有很好地定义。
推荐阅读
- symfony - Symfony 3.4 中各种配置参数的存储位置
- r - ggplot:对齐多个刻面图-所有不同大小的刻面
- python - 使用 Boto3(资源方法)创建图像 - 无法将标签添加到快照?
- reactjs - redux prop.state 可以发送到子组件但子组件不会自动更新
- ios - UITabBarItem - 将图像与标题文本分开放置
- ubuntu - 如何在 Windows 10 Spring Creators Update 上解决 Ubuntu 中的运行级别错误?
- yii2 - Yii2 中的 Dependent Dropdown 在更新时丢失了值
- sql - 将 SSRS 连接到 Oracle 数据源
- bash - bash (awk) 分割字符串
- android - 如何以编程方式添加评分栏