테이블의 일부 행을 업데이트 한 다음이 행을 표시해야합니다. 하나의 쿼리로이 작업을 수행하고이 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)
및 최신 당신은 RETURNING
를 사용하여이 작업을 수행 할 수 있습니다
UPDATE table
SET foo=1
WHERE boo=2
RETURNING *
저장 프로 시저 또는 기능을 사용할 수 있습니다. 귀하의 질의가 포함됩니다.
당신은 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 문서
RETURNING을 사용할 수 있기 전에 이전 버전, 8.2 이전 버전에서만 유용합니다. 하나의 쿼리만으로 동일한 데이터를 처리 할 수 있다면 동일한 데이터에 대해 두 개의 쿼리가 필요하지 않습니다. –
맞습니다. 그러나 이것은 비표준 SQL 기능입니다. 당신은 그것을 알고 있어야합니다. 그러나 어쨌든 나는 쿼리를 보낼 것이다. – Janning
당신이 한 일을 할 경우 또 다른, 당신이 정말로 같은 시간에 그 일을하지 않는; 업데이트 전후에 질의 결과를 가질 수 있습니다. –