如何同时进行UPDATE和SELECT操作

10

我需要更新一些表格的行并显示这些行。有没有一种方法可以用一个查询完成这个操作,避免使用两个查询?

UPDATE table SET foo=1 WHERE boo=2

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

如果你想先做一件事再做另一件事,那么你并不是在同时进行它们;你可以在更新之前或之后获得查询的结果。 - Pete Kirkham
3个回答

28

在 PostgreSQL 版本 8.2 及更高版本中,您可以使用 RETURNING 来实现此操作:

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

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 可用之前。如果可以使用一个查询完成,则不需要在相同的数据上使用两个查询。 - Frank Heikens
你说得对,但这是一个非标准的SQL特性。你应该意识到这一点。但我仍然会发送这两个查询。 - Janning Vygen

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接