PostgreSQL的UPDATE语句中的FROM子句到底做什么?

时间:2019-06-18 00:31:18

标签: sql postgresql

要在更新语句中引用PostgreSQL文档:

“当存在FROM子句时,本质上是将目标表联接到from_list中提到的表,并且联接的每个输出行都代表目标表的更新操作。使用FROM时,您应该确保该联接为要修改的每一行最多产生一个输出行。”

我有两个问题:

  1. 表与from_list中提到的表之间执行哪种连接?我的直觉告诉我这是交叉连接。如果不是,那是内部联接吗?它以什么条件加入表格?
  2. 有人可以解释引用的第二句话吗?如果可能,提供一个示例,说明需要在何处采取这种预防措施?

非常感谢!

1 个答案:

答案 0 :(得分:1)

“ join”是一个CROSS JOIN,但是通常可以通过WHERE子句中的条件来缓解这种情况:

update a
    . . .
    from b
    where a.x = b.y;  <-- turns this into an inner join

第二条语句只是条件要从a开始仅一行,因此,如果b(或FROM子句中的任何表)中有重复的匹配项,在a中找出如何将其减少为每行一个引用。