在插入/更新后,SQL(postgres)从多个表中返回数据

cra*_*tin 6 sql postgresql join sql-update sql-insert

在postgres中是否可能在1)INSERT INTO和2)UPDATE之后从多个表返回数据?

例如,假设以下人为的示例:

review             fit
------             ----
id                 id
fit_id             label
body
Run Code Online (Sandbox Code Playgroud)

1)如何插入检查表并在RETURNING子句中返回与检查数据结合的各个拟合数据?

因此,要插入的SQL没有完成所需的结果:

INSERT INTO review (id, fit_id, body) VALUES (5, 1, 'some copy') RETURNING *;
Run Code Online (Sandbox Code Playgroud)

但是,所需的结果是:

id     | 5
fit_id | 1
body   | some copy
id     | 1
label  | some label
Run Code Online (Sandbox Code Playgroud)

2)如何更新评论fit_id并在RETURNING子句中返回与评论数据结合的新拟合数据?

SQL将fit_id更新2为审阅5而未完成所需结果:

UPDATE review SET fit_id = 2 WHERE review_id = 5 RETURNING *;
Run Code Online (Sandbox Code Playgroud)

但是,所需的结果是:

id     | 5
fit_id | 2
body   | some copy
id     | 2
label  | some other label
Run Code Online (Sandbox Code Playgroud)

404*_*404 6

WITH inserted AS (
    INSERT INTO review VALUES (...) RETURNING *
)
SELECT inserted.*, fit.*
FROM inserted
INNER JOIN fit ON inserted.fit_id = fit.id
Run Code Online (Sandbox Code Playgroud)

这将为您提供所需的输出。相当确定您不能从UPDATE/INSERT ... RETURNING语句中的另一个表返回内容。