我需要更新表的一些行,然後顯示這些行。有沒有辦法做到這一點與一個單一的查詢,並避免這2個查詢? :如何更新和選擇在同一時間
UPDATE table SET foo=1 WHERE boo=2
SELECT * from table WHERE (foo=1) AND (boo=2)
我需要更新表的一些行,然後顯示這些行。有沒有辦法做到這一點與一個單一的查詢,並避免這2個查詢? :如何更新和選擇在同一時間
UPDATE table SET foo=1 WHERE boo=2
SELECT * from table WHERE (foo=1) AND (boo=2)
在PostgreSQL V8.2及更高版本,你可以使用RETURNING
做到這一點:
UPDATE table
SET foo=1
WHERE boo=2
RETURNING *
您可以使用存儲過程或函數。它將包含您的查詢。
您可以使用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文檔
這隻適用於8.2之前的舊版本,在RETURNING可用之前。如果只用一個查詢就可以完成相同的數據,則不需要兩次查詢。 – 2010-05-29 13:01:25
你是對的,但它是一個非標準的SQL功能。你應該知道它。但我會發送到查詢無論如何。 – Janning 2010-05-29 15:52:28
如果你想做一兩件事,然後另一個,你沒有真正做他們在同一時間;您可以在更新之前或之後獲得查詢結果。 – 2010-05-29 10:29:59