SQL सर्वर में नेस्टेड स्टेटमेंट


387

निम्नलिखित कार्य क्यों नहीं करता है?

SELECT name FROM (SELECT name FROM agentinformation)

मुझे लगता है कि एसक्यूएल के बारे में मेरी समझ गलत है, क्योंकि मैंने सोचा होगा कि यह उसी तरह लौटेगा

SELECT name FROM agentinformation

क्या आंतरिक चयन कथन एक परिणाम सेट नहीं बनाता है जो बाहरी चयन कथन और फिर प्रश्न करता है?

जवाबों:


672

आपको उपवर्ग को बदलने की जरूरत है।

SELECT name FROM (SELECT name FROM agentinformation) a  

या अधिक स्पष्ट होने के लिए

SELECT a.name FROM (SELECT name FROM agentinformation) a  

76
सुनिश्चित करें कि आपका उपनाम कुछ हद तक क्रियात्मक भी है! जब मैं t1, t2, t3, t4, t5, t6
डग चैंबरलेन

2
whereबाहरी क्वेरी के लिए एक खंड कहाँ जाएगा ?
कर्नल पैनिक ने

3
@ColonelPanic: बाहरी क्वेरी के लिए क्लॉज बहुत अंत में निपटाया जाएगा।
जो स्टीफेनेली

"ठीक है, मैं एक बेवकूफ हूँ! धन्यवाद, एक बार अनुमति मिल जाएगी।" नाह। बस अज्ञानी है। हम सभी की तरह।
लुसियो मोलीडीनो

2
ऑरेकल selectबिना उपनाम के पहले को स्वीकार करता है ।
Kjetil S.

49

जवाब जो Stefanelli द्वारा प्रदान की पहले से ही सही है।

SELECT name FROM (SELECT name FROM agentinformation) as a  

हमें उपवर्ग का एक उपनाम बनाने की आवश्यकता है क्योंकि एक क्वेरी को एक टेबल ऑब्जेक्ट की आवश्यकता होती है जो हमें उप-वर्ग के लिए एक उपनाम बनाने से मिलेगा। वैचारिक रूप से, उपशम परिणामों को बाहरी प्रश्न में प्रतिस्थापित किया जाता है। जैसा कि हमें बाहरी क्वेरी में तालिका ऑब्जेक्ट की आवश्यकता है, हमें आंतरिक क्वेरी का एक उपनाम बनाने की आवश्यकता है।

एक उपश्रेणी शामिल करने वाले कथन आमतौर पर इनमें से एक रूप लेते हैं:

  • कहां अभिव्यक्ति [नहीं] (उपश्रेणी)
  • जहां अभिव्यक्ति की तुलना_प्रोसेसर [कोई भी | सब] (उपश्रेणी)
  • जहां नहीं [] उदाहरण (उपश्रेणी)

अधिक उप-नियम और उप-प्रकार के नियमों की जाँच करें ।

नेस्टेड सबक्वेरीज़ के और उदाहरण

  1. IN / NOT IN - यह ऑपरेटर आंतरिक क्वेरी के निष्पादन के बाद आंतरिक क्वेरी का आउटपुट लेता है जो शून्य या अधिक मान हो सकता है और इसे बाहरी क्वेरी को भेजता है। बाहरी क्वेरी तब सभी मिलान [संचालक] या गैर मिलान [संचालक नहीं] पंक्तियों में मिलती है।

  2. कोई - [> कोई भी या कोई भी ऑपरेटर आंतरिक क्वेरी द्वारा निर्मित मूल्यों की सूची लेता है और उन सभी मूल्यों को प्राप्त करता है जो सूची के न्यूनतम मूल्य से अधिक हैं।

उदाहरण के लिए> कोई भी (100,200,300), कोई भी ऑपरेटर 100 से अधिक के सभी मूल्य प्राप्त करेगा।

  1. सभी - [> सभी या सभी ऑपरेटर आंतरिक क्वेरी द्वारा उत्पादित मूल्यों की सूची लेते हैं और उन सभी मूल्यों को प्राप्त करते हैं जो सूची के अधिकतम से अधिक हैं।

उदाहरण के लिए> ALL (100,200,300), सभी ऑपरेटर 300 से अधिक मूल्य प्राप्त करेंगे।

  1. EXISTS - EXISTS कीवर्ड एक बूलियन मान [TRUE / FALSE] का उत्पादन करता है। यह EXISTS उप क्वेरी द्वारा लौटी पंक्तियों के अस्तित्व की जाँच करता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.