在 Postgres 中更新左连接表的 NULL 值

Posted

技术标签:

【中文标题】在 Postgres 中更新左连接表的 NULL 值【英文标题】:update NULL values of left joint table in Postgres 【发布时间】:2020-05-21 02:56:43 【问题描述】:

我的数据库文档和位置中有这两个表。

select * from  Document     

id  locid   loccode
1   1010    30
2   2020    30
3   3030    30
4   4040    40

select * from location

locid   loccode date    Status
1010    30  20-10-2019  A
2020    30  20-10-2019  A
3030    40  20-10-2019  A
4040    40  20-10-2019  A
6060    30  20-10-2019  A
7070    40  20-10-2019  A
8080    30  20-10-2019  D
9090    40  20-10-2019  D

我想更新位置表中的状态,其记录(左连接空值)不可用文档。 我尝试以下查询,但需要更多时间。

update location 
set status='D' 
from location A 
left join document B on A.locid=B.locid and A.loccode=B.loccode  
where b.id is NULL;

请帮我解决一下

【问题讨论】:

【参考方案1】:

我会推荐not exists

update location 
set status = 'D' 
where not exists (
    select 1 
    from document d
    where d.locid = location.locid and d.loccode = location.loccode
)

为了提高性能,您需要在document(locid, loccode) 上建立索引,因此子查询执行得很快。 location(locid, loccode) 上的索引也可能有所帮助。

【讨论】:

以上是关于在 Postgres 中更新左连接表的 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 使用跨 2 个表的内部连接进行更新?

Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行

Postgres 更新语句

Oracle左连接

在 postgres 中更新具有大量删除的表的主键序列

数据库表与表的连接方式