मैं DELETE कथन में एक उपनाम का उपयोग क्यों नहीं कर सकता?


158

दृश्य स्टूडियो 2010 में SQL सर्वर कॉम्पैक्ट संस्करण में (शायद SQL सर्वर और सामान्य रूप में SQL, मुझे नहीं पता), यह कमांड काम करता है:

DELETE FROM foods WHERE (name IN ('chickens', 'rabbits'))

लेकिन यह आदेश एक त्रुटि उत्पन्न करता है: Error near identifier f. Expecting OUTPUT.

DELETE FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))

@ aaron-bertrand मेरे शीर्षक को सही करने के लिए धन्यवाद। मैंने जो भी पोस्ट किया उसके लिए मुझे सही शब्द का एहसास नहीं था (अन्यथा Google इसे जल्दी से हल कर सकता था)। फिर से धन्यवाद।
रिकार्डो अल्टामिरानो

कोई चिंता नहीं। बस इसे अन्य पाठकों के लिए स्पष्ट करने की कोशिश की जा रही है।
आरोन बर्ट्रेंड

मैं इस तरह से आपके साथ सहमत हूं कि कई बार अलग-अलग आदेशों के बीच वाक्य विन्यास भिन्न होता है।
आरोन बर्ट्रेंड

यहाँ एक ही सवाल है, लेकिन अद्यतन विवरण के लिए: stackoverflow.com/questions/31551/…
डैनियल नील

जवाबों:


239

तालिका को अन्य नाम से कहना होगा:

DELETE f FROM dbo.foods AS f WHERE f.name IN (...);

मैं इस विशिष्ट DELETEबयान के लिए विशेष रूप से (कम से कम IIRC) के लिए उपनाम के बिंदु को देखने में विफल रहता हूं , यह अब सख्त एफएसआई के अनुरूप नहीं है। लेकिन हां, जैसा कि टिप्पणियां बताती हैं, यह अन्य क्वेरी रूपों (जैसे सहसंबंध) के लिए आवश्यक हो सकता है।


2
मैं मुख्य रूप से सिर्फ जिज्ञासु था, क्योंकि मैं आमतौर पर उपनाम का उपयोग करते समय SELECTऔर ऐसे अन्य बयानों का उपयोग करता हूं, इसलिए मैंने सहज रूप से वही किया है जो मैं करने के लिए इस्तेमाल किया गया था और सोच रहा था कि यह ठीक से काम क्यों नहीं करता है।
रिकार्डो अल्टामिरानो

41
+1 ओपी के मामले में, अलियासिंग की आवश्यकता नहीं हो सकती है, लेकिन यह मेरे लिए उपयोगी था क्योंकि मैं एक परीक्षा खंड का उपयोग कर रहा था, इसलिए मुझे तालिका को अन्य नाम देना पड़ा ताकि मैं दोनों प्रश्नों को एक साथ जोड़ सकूं।
रिकार्डो

4
मैं एक मौजूदा चयन क्वेरी को लेते समय एक समाधान की तलाश कर रहा था और इसे बदलकर फिर से लिखे बिना जल्दी से एक DELETE कथन में बदल दिया।
एलेक्स

4
उपयोग के मामले का उदाहरण जहां यह महत्वपूर्ण है; दूसरी तालिका की सामग्री के आधार पर हटाना जहां कई कॉलम शामिल हैं (यानी काम नहीं करेगा inया not inनहीं:DELETE f from dbo.foods as f where not exists (select top 1 1 from animalDiets a where a.AnimalId = f.AnimalId and a.DietId = f.DietId)
JohnLevan

3
जब आप किसी तालिका से हटाना चाहते हैं तो उपनाम के साथ डिलीट उपयोगी होता है, लेकिन पंक्तियों का एक छोटा सेट प्राप्त करने के लिए उस तालिका को अन्य तालिकाओं / दृश्यों में शामिल करना होगा। जैसेdelete o from Order as o inner join Customer as c on c.CustomerID = o.CustomerID where c.ArchiveOrders = 1
एंड्रयू जेन्स

74

डिलीट स्टेटमेंट में अजीब सिंटैक्स है। यह इस प्रकार चलता है:

DELETE f FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))

1
@ रिकार्डो केवल अंतर स्कीमा है। लेकिन समय बताता है कि दोनों एक ही समय पर पोस्ट किए गए थे।
मुकुस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.