代码之家  ›  专栏  ›  技术社区  ›  xRobot

如何同时更新和选择

  •  5
  • xRobot  · 技术社区  · 15 年前

    我需要更新一些表的行,然后显示这些行。有没有一种方法可以通过一个查询来做到这一点并避免使用这两个查询?:

    UPDATE table SET foo=1 WHERE boo=2
    
    SELECT * from table WHERE ( foo=1 ) AND ( boo=2 )
    
    3 回复  |  直到 15 年前
        1
  •  18
  •   Mark Byers    15 年前

    在PostgreSQL V8.2及更高版本中,可以使用 RETURNING :

    UPDATE table
    SET foo=1
    WHERE boo=2
    RETURNING *
    
        2
  •  2
  •   Janning Vygen    15 年前

    可以使用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 文档

        3
  •  1
  •   Sir Hally    15 年前

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