2012-09-16 8 views
10

मैंने हाल ही में एक विषमता में भाग लिया।"तालिका से हटाएं" के लिए output_expression क्या करता है?

DELETE FROM customer *; 

PostgreSQL DELETE के लिए दस्तावेज़ का कहना है स्टार output_expression के लिए एक संभावित मूल्य है:

एक अभिव्यक्ति की गणना की और प्रत्येक पंक्ति के बाद उसे हटा आदेश द्वारा दिए जाते निम्नलिखित वैध एसक्यूएल है हटा दिया गया है। अभिव्यक्ति उपयोग में सूचीबद्ध तालिका या तालिका के किसी स्तंभ नाम का उपयोग कर सकती है। सभी कॉलम लौटने के लिए * लिखें।

मैंने इसे स्टार के साथ और बिना कोशिश की और अंतर नहीं देखा। असल में, मैं टेबल नाम के बाद केवल एक शब्द के बारे में कुछ भी डाल सकता हूं और इसे स्वीकार किया जाता है। यह एक वास्तविक कॉलम नाम भी नहीं होना चाहिए। कुछ अतिरिक्त वापस नहीं किया जाता है।

db=> DELETE FROM customer wheeeeeee; 
DELETE 19 

तो यह क्या करता है और मैं इसके लिए क्या उपयोग कर सकता हूं?

प्रश्न also posted on the PostgreSQL mailing list

+0

क्यों कोशिश नहीं करें और पता लगाएं? –

+0

मैंने किया। यह सिर्फ पंक्तियों को हटा देता है और कुछ खास नहीं देता है। –

+4

ऐसा लगता है कि आप 'रिटर्निंग' को याद करते हैं जो 'output_expression' से पहले व्याकरण का एक गैर वैकल्पिक हिस्सा है, मुझे लगता है कि '*' को इसके बिना उपनाम (जैसा कि' wheeeeeee' के लिए) माना जाता है। –

उत्तर

5

तारांकन output_expression नहीं है, इसके लिए आपको RETURNING कीवर्ड का उपयोग करना होगा। यह प्रश्नों में बाल तालिकाओं को शामिल करने के लिए एक पुराना, अप्रचलित वाक्यविन्यास है। (पिछले संस्करण जिसके लिए वह दस्तावेज है PostgreSQL 8.1 हो रहा है। के बाद से वाक्य रचना अभी भी यह एक प्रलेखन बग है, के रूप में टॉम लेन नीचे लिंक किए गए पोस्ट में बताते हैं वैध है।)

PostgreSQL 7.1 के बाद से यह डिफ़ॉल्ट है (जब तक कि sql_inheritance बंद नहीं है) और ONLY कीवर्ड का उपयोग विपरीत के लिए किया जाता है, इसलिए * बहुत उपयोगी नहीं है।

this explanatory post from Tom Lane on the PostgreSQL mailing list देखें।

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