दो तालिकाओं मान लें:सबक्वायरी में WHERE स्थिति मुख्य क्वेरी को प्रभावित करती है - क्या यह एक सुविधा या बग है?
Table A: A1, A2, A_Other
Table B: B1, B2, B_Other
निम्न उदाहरणों में,is something
एक शर्त एक निश्चित मान, उदा के खिलाफ जाँच की है= 'ABC'
या< 45
।
Select * from A
Where A1 IN (
Select Distinct B1 from B
Where B2 is something
And A2 is something
);
क्या मैं सच में था (2) लिखने का मतलब:
Select * from A
Where A1 IN (
Select Distinct B1 from B
Where B2 is something
)
And A2 is something;
अजीब, दोनों प्रश्नों
मैं जैसे निम्नलिखित (1) एक प्रश्न लिखा था एक ही परिणाम लौटा दिया। जब को देख क्वेरी की योजना समझाने, यह, जैसे जब सबक्वेरी मार डाला गया था देखा क्योंकि हालत A2 is something
सबक्वेरी के लिए लागू नहीं था, यह मुख्य क्वेरी परिणामों पर एक फिल्टर के रूप में उपयोग के लिए आस्थगित था।
मैं सामान्य रूप से उम्मीद करेंगे क्वेरी विफल क्योंकि सबक्वेरी ही से विफल हो जाएगा:
Select Distinct B1 from B
Where B2 is something
And A2 is something; --- ERROR: column "A2" does not exist
लेकिन मैं पाते हैं कि ऐसा नहीं है, और Postgres मुख्य क्वेरी के लिए अयोग्य सबक्वेरी की स्थिति defers ।
क्या यह मानक व्यवहार या पोस्टग्रेस विसंगति है? यह दस्तावेज कहां है, और यह सुविधा क्या कहा जाता है?
इसके अलावा, मुझे लगता है कि अगर मैं मेज B
में एक स्तंभ A2
जोड़ने के लिए, के रूप में मूल रूप से करना ही क्वेरी काम करता है लगता है। इस मामले में क्वेरी में संदर्भ A2
अभी भी A.A2
को उल्लेख करता है, लेकिन क्वेरी में संदर्भ नया स्तंभ B.A2
को उल्लेख करता है, क्योंकि यह सबक्वेरी में सीधे अब लागू है।
यह एक सहसंबंधित सबक्वायरी है। – OldProgrammer
यह ठीक प्रतीत नहीं होता है क्योंकि मैं subquery में परिणाम फ़िल्टर करने के लिए मुख्य क्वेरी में मानों का उपयोग कर _really_ नहीं कर रहा हूं (जो सहसंबंधित सबक्वायरी करता है)। यहां फ़िल्टर मुख्य क्वेरी पर अभी भी लागू है। लेकिन हाँ, यह हो सकता है। _Btw, यह बताते हुए एक विस्तृत उत्तर अच्छा होगा कि क्या हो रहा है ._ – ADTC
ए 2 कुछ है या बी 2 कुछ स्पष्ट नहीं है। यह उस पर निर्भर करता है। मुझे लगता है कि कुछ रिकॉर्ड के आधार पर आप दोनों क्वेरी से एक ही परिणाम प्राप्त कर रहे हैं। – KumarHarsh