2010-05-29 34 views
5

我需要更新表的一些行,然后显示这些行。有没有办法做到这一点与一个单一的查询,并避免这2个查询? :如何更新和选择在同一时间

UPDATE table SET foo=1 WHERE boo=2 

SELECT * from table WHERE (foo=1) AND (boo=2) 
+0

如果你想做一两件事,然后另一个,你没有真正做他们在同一时间;您可以在更新之前或之后获得查询结果。 – 2010-05-29 10:29:59

回答

18

在PostgreSQL V8.2及更高版本,你可以使用RETURNING做到这一点:

UPDATE table 
SET foo=1 
WHERE boo=2 
RETURNING * 
1

您可以使用存储过程或函数。它将包含您的查询。

2

您可以使用PL/pgSQL的存储过程。看看在[文档] [1]

东西这样

CREATE FUNCTION run(fooVal int, booVal int) 
RETURNS TABLE(fooVal int, booVal int) 
AS $$ 
BEGIN 
    UPDATE table SET foo = fooVal WHERE boo= booVal; 
    RETURN QUERY SELECT fooVal, booVal from table WHERE (foo = fooVal) AND (boo = booVal); 
END; 
$$ LANGUAGE plpgsql; 

您将节省往返时间发送另一个语句。这不应该是性能瓶颈。所以简短的回答:只需使用两个查询。这很好,这是你如何在SQL中完成的。

[1]:http://www.postgresql.org/docs/8.4/static/plpgsql.html文档

+1

这只适用于8.2之前的旧版本,在RETURNING可用之前。如果只用一个查询就可以完成相同的数据,则不需要两次查询。 – 2010-05-29 13:01:25

+0

你是对的,但它是一个非标准的SQL功能。你应该知道它。但我会发送到查询无论如何。 – Janning 2010-05-29 15:52:28