在postgresql中使用子查询更新

在postgresql中使用子查询更新,sql,postgresql,Sql,Postgresql,我尝试使用子查询更新postgresql表 UPDATE bc SET (r, w) = ($1, $2) WHERE bc.sr_id IN ( UPDATE sr SET (r, w) = ($1, $2)

我尝试使用子查询更新postgresql表

        UPDATE
            bc
        SET
            (r, w) = ($1, $2)
        WHERE
            bc.sr_id IN (
                UPDATE
                    sr
                SET
                    (r, w) = ($1, $2)
                WHERE
                    si = $3 AND
                    rti = $4 AND
                    fc = $5
                RETURNING sr.id
            )

为什么返回错误?

您不能像这样链接DML语句。您必须使用可写CTE

WITH buz AS
(UPDATE foo
SET num=0 WHERE num>5 RETURNING num)
UPDATE bar SET num=0 WHERE num IN
(SELECT num FROM foo);
SELECT * FROM foo;
SELECT * FROM bar;

错误消息是什么?从9.1版开始提供,如果您使用的是旧版本,则提供升级原因。