2010-05-29 27 views
5

Tabloların bazı satırlarını güncellemeye ve sonra bu satırları görüntülemem gerekiyor. Bunu tek bir sorguyla yapmanın ve bu 2 sorgudan kaçınmanın bir yolu var mı? :Aynı anda UPDATE ve SELECT

UPDATE table SET foo=1 WHERE boo=2 

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

bir şeyi yapmak istiyorsanız o zaman başka, gerçekten bunları aynı anda yapmıyoruz; Sorunun sonuçlarını önce ya da sonra yapabilirsiniz. –

cevap

18
PostgreSQL V8.2 olarak

ve daha yeni sen RETURNING kullanarak bunu yapabilirsiniz:

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

Kayıtlı yordamı veya işlevi kullanabilirsiniz. Sorgularınızı içerecektir.

2

Sen PL/pgSQL bir saklı yordam kullanabilirsiniz. Başka bir açıklama göndermek için gidiş dönüş zaman kazandıracak bu

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; 

gibi [docs] bir göz [1]

şey atın. Bu bir performans darboğazı olmamalıdır. Kısa cevap: Sadece iki sorgu kullanın. Bu iyi ve SQL'de bunu nasıl yapıyorsun.

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

+1

Bu, eski sürümlerde, RETURNING'un kullanıma sunulmadan önce 8.2'den önceki sürümlerde kullanışlıdır. Yalnızca bir sorgu ile yapabiliyorsanız aynı verilerde iki sorguya ihtiyacınız yoktur. –

+0

Haklısınız, ancak standart olmayan bir SQL özelliğidir. Farkında olmalısın. Ama yine de sorgulara yolluyorum. – Janning