2010-05-29 18 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]

कुछ आप एक और बयान भेजने के लिए गोल यात्रा समय की बचत करेंगे लो। यह एक प्रदर्शन बाधा नहीं होनी चाहिए। तो संक्षिप्त उत्तर: बस दो प्रश्नों का प्रयोग करें। यह ठीक है और इस तरह आप इसे एसक्यूएल में करते हैं।

[1]: http://www.postgresql.org/docs/8.4/static/plpgsql.html डॉक्स

+1

यह पुराने संस्करणों में केवल उपयोगी है, 8.2 से पहले संस्करण, रिटर्निंग उपलब्ध होने से पहले। यदि आप केवल एक प्रश्न के साथ ऐसा कर सकते हैं तो आपको उसी डेटा पर दो प्रश्नों की आवश्यकता नहीं है। –

+0

आप सही हैं, लेकिन यह एक गैर-मानक SQL सुविधा है। आपको इसके बारे में पता होना चाहिए। लेकिन मैं वैसे भी प्रश्नों को भेजूंगा। – Janning

संबंधित मुद्दे