2010-05-29 69 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