我需要更新表的某些行,然后显示这些行。有没有办法用一个查询执行此操作并避免此2查询? :
UPDATE table SET foo=1 WHERE boo=2
SELECT * from table WHERE ( foo=1 ) AND ( boo=2 )
答案 0 :(得分:18)
在PostgreSQL v8.2及更新版本中,您可以使用RETURNING
执行此操作:
UPDATE table
SET foo=1
WHERE boo=2
RETURNING *
答案 1 :(得分:2)
您可以在PL / pgSQL中使用存储过程。看一下[docs] [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 docs
答案 2 :(得分:1)
您可以使用存储过程或功能。它将包含您的查询。