2011-11-04 17 views
9

यह सिर्फ मेरे लिए इतना अजीब लग रहा है:SQL क्वेरी में क्लॉज से दो कैसे हो सकते हैं?

delete from [GearsDev].[dbo].[Products] 
from [GearsDev].[dbo].[Products] as C 
inner join #common M 
    on M.item = C.ItemNumber 

#Common एक अस्थायी तालिका है, लेकिन यह के बाकी मेरे लिए कोई मतलब नहीं है। आप दो से कैसे हो सकते हैं? कृपया एक नोब आउट में मदद करें।

उत्तर

12

DELETE के प्रलेखन से देखा जा सकता है, इसमें दो FROM खंड ले सकते हैं।

पहले FROM:

से: एक वैकल्पिक कीवर्ड को हटाने के लिए कीवर्ड और लक्ष्य table_or_view_name, या rowset_function_limited के बीच इस्तेमाल किया जा सकता है।

दूसरा FROM:

FROM <table_source>: FROM खंड एक अतिरिक्त निर्दिष्ट करता है। DELETE के लिए यह ट्रांजैक्ट-एसक्यूएल एक्सटेंशन पहले FROM खंड में तालिका से संबंधित पंक्तियों से डेटा निर्दिष्ट करने और हटाने की अनुमति देता है।

यह एक्सटेंशन, जो शामिल होने को निर्दिष्ट करता है, को हटाए जाने के लिए पंक्तियों की पहचान करने के लिए WHERE खंड में एक सबक्वायरी के बजाय उपयोग किया जा सकता है।

तो, एसक्यूएल Products तालिका एक मिलान के आइटम है कि जब यह #common साथ जुड़ा हुआ है से रिकॉर्ड को नष्ट करेगा।

यह निम्न क्वेरी के बराबर (अर्थ में) है:

delete from [GearsDev].[dbo].[Products] 
where ItemNumber in 
(
    select item from #common 
) 
+0

अच्छा जवाब और लिंक के लिए धन्यवाद के आइटम के साथ #Common में एक इसी पंक्ति है। – broke

2

आप रिकॉर्ड आप एक से अधिक तालिका से हटाना चाहते हैं के सेट को सीमित कर सकते हैं। दूसरा from आपके द्वारा हटाए गए तालिका के लिए उपनाम C उत्पन्न करता है, इसे #common तालिका में शामिल करता है और केवल रिकॉर्ड रिकॉर्ड करता है जिसमें ताल्बे #common में रिकॉर्ड है।

1

MSDN से दूसरा दूसरा आपको एक फ़िल्टर बनाने की अनुमति देता है जो पहले से संबंधित पंक्तियों को हटा दिया जाता है, जहां वे मेल खाते हैं।

इस मामले में सभी हटाएं [GearsDev]। [Dbo]। [उत्पाद] जहां ItemNumber एक ही मूल्य

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