2010-05-29 3 views
5

테이블의 일부 행을 업데이트 한 다음이 행을 표시해야합니다. 하나의 쿼리로이 작업을 수행하고이 2 개의 쿼리를 피할 수있는 방법이 있습니까? :동시에 업데이트 및 선택 방법

UPDATE table SET foo=1 WHERE boo=2 

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

당신이 한 일을 할 경우 또 다른, 당신이 정말로 같은 시간에 그 일을하지 않는; 업데이트 전후에 질의 결과를 가질 수 있습니다. –

답변

18
의 PostgreSQL V8.2에서

및 최신 당신은 RETURNING를 사용하여이 작업을 수행 할 수 있습니다

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

저장 프로 시저 또는 기능을 사용할 수 있습니다. 귀하의 질의가 포함됩니다.

2

당신은 PL/pgSQL의에서 저장 프로 시저를 사용할 수 있습니다. 당신은 다른 문을 보내기위한 왕복 시간을 절약 할이

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; 

같은 [문서]를 살펴 [1]

뭔가 을 가져 가라. 이것은 성능 병목이되어서는 안됩니다. 그래서 짧은 대답 : 그냥 두 개의 쿼리를 사용하십시오. 괜찮습니다. SQL에서이 작업을 수행하는 방법입니다.

[1] : http://www.postgresql.org/docs/8.4/static/plpgsql.html 문서

+1

RETURNING을 사용할 수 있기 전에 이전 버전, 8.2 이전 버전에서만 유용합니다. 하나의 쿼리만으로 동일한 데이터를 처리 할 수 ​​있다면 동일한 데이터에 대해 두 개의 쿼리가 필요하지 않습니다. –

+0

맞습니다. 그러나 이것은 비표준 SQL 기능입니다. 당신은 그것을 알고 있어야합니다. 그러나 어쨌든 나는 쿼리를 보낼 것이다. – Janning

관련 문제