2010-05-29 17 views
5

Necesito actualizar algunas filas de las tablas y luego mostrar estas filas. ¿Hay alguna manera de hacer esto con una sola consulta y evitar esta 2 consulta? :Cómo ACTUALIZAR y SELECCIONAR al mismo tiempo

UPDATE table SET foo=1 WHERE boo=2 

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

Si usted quiere hacer una cosa y luego otra, usted no está realmente haciendo al mismo tiempo; tu caña tiene los resultados de la consulta antes o después de la actualización. –

Respuesta

18

En PostgreSQL v8.2 y posteriores se puede hacer esto utilizando RETURNING:

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

Puede usar el procedimiento almacenado o la función. Contendrá tus consultas.

2

Se puede utilizar un procedimiento almacenado en PL/pgSQL. Echar un vistazo a los documentos [] [1]

Algo como esto

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; 

Usted ahorrará el tiempo de ida y vuelta para el envío de otra declaración. Esto no debería ser un cuello de botella de rendimiento. Así que respuesta corta: solo usa dos consultas. Eso está bien y así es como lo haces en SQL.

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

+1

Esto solo es útil en versiones anteriores, versiones anteriores a la 8.2, antes de que estuviera disponible RETURNING. No necesita dos consultas sobre la misma información si puede hacerlo con una sola consulta. –

+0

Tiene razón, pero es una característica de SQL no estándar. Deberías ser consciente de eso. Pero enviaría las consultas de todos modos. – Janning

Cuestiones relacionadas