如何使用内部联接更新两个表中的多个字段

时间:2018-12-19 12:40:49

标签: postgresql

我有两个桌子。我需要两个字段来更新。 它们通过外键相互连接。我想通过使用内部联接来更新在这两个表中找到的字段。

UPDATE cert
    SET cert.status = 1, doc.status = 1
    FROM certificates cert 
INNER JOIN documents doc ON doc.data_id = cert.certificate_id
    WHERE cert.status = 0 AND cert.user_id = _expert_id AND doc.data_type = 'CERTIFICATE';  

我上面提到的代码仅允许我更新证书表中的状态字段。另外,我想更新文档表中的字段

1 个答案:

答案 0 :(得分:2)

也许这会有所帮助:

demo:db<>fiddle

aaaaa---__
aaaaa-b-__
aaaaa---__
--------__
--c-----__
--------__
__________
__________

使用WITH cert_update AS ( UPDATE certificates cert SET status = 1 FROM documents doc WHERE doc.data_id = cert.certificate_id AND cert.status = 0 AND cert.user_id = '2' -- your "_expert_id" AND doc.data_type = 'CERTIFICATE' RETURNING certificate_id ) UPDATE documents doc SET status = 1 FROM cert_update cert WHERE doc.data_id = cert.certificate_id AND doc.data_type = 'CERTIFICATE'; 子句( CTE ),您可以在一个查询中进行多次更新。第一个返回更新后的WITH,可在第二个查询中使用。