【问题标题】:How UPDATE and SELECT at the same time如何同时 UPDATE 和 SELECT
【发布时间】:2011-02-25 10:28:10
【问题描述】:

我需要更新表格的一些行,然后显示这些行。有没有办法用一个查询来做到这一点并避免这 2 个查询? :

UPDATE table SET foo=1 WHERE boo=2

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

【问题讨论】:

  • 如果你想做一件事然后做另一件事,你并没有真正同时做它们;您可以在更新之前或之后获得查询结果。

标签: php database postgresql select


【解决方案1】:

在 PostgreSQL v8.2 及更新版本中,您可以使用 RETURNING 来执行此操作:

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

【讨论】:

    【解决方案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 文档

    【讨论】:

    • 这仅适用于旧版本,8.2 之前的版本,在 RETURNING 可用之前。如果您只需一次查询即可完成对同一数据的两次查询。
    • 你是对的,但它是一个非标准的 SQL 特性。你应该意识到这一点。但无论如何我都会发送查询。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多