2013-03-06 72 views
1

子查询我尝试更新PostgreSQL表使用子查询更新与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 
      ) 

为什么它的回报错误?

+1

什么是错误讯息? – Taryn 2013-03-06 10:32:43

回答

2

您不能链接那样的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; 

http://sqlfiddle.com/#!1/513a2/1

+1

从版本9.1起可用,如果您使用的是旧版本,则需要升级。 – 2013-03-06 12:29:04