2012-07-17 24 views
5

संभव डुप्लिकेट:
Column does not exist in the IN clause, but SQL runsयह SQL कोड क्यों त्रुटि उत्पन्न नहीं करता है?

मैं आज काम करते समय यह आज पर ठोकर खाई और मैं सोच रहा था, क्यों यह है कि निम्नलिखित कोड उत्पन्न नहीं करता है और त्रुटि?

CREATE TABLE #TableA (ColumnA VARCHAR(25)) 
CREATE TABLE #TableB (ColumnB VARCHAR(25)) 

INSERT INTO #TableA (ColumnA) VALUES('1') 
INSERT INTO #TableA (ColumnA) VALUES('2') 
INSERT INTO #TableA (ColumnA) VALUES('3') 

INSERT INTO #TableB (ColumnB) VALUES('1') 

SELECT * 
FROM #TableA 
WHERE ColumnA IN(SELECT ColumnA FROM #TableB) 

आउटपुट:

ColumnA 
1 
2 
3 

Columna #TableB पर मौजूद नहीं है, कैसे कोई त्रुटि उत्पन्न होता है?

@@ संस्करण मुझसे कहता है मैं इस चल रहा हूँ: सबक्वेरी (SELECT ColumnA FROM #TableB) में

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM) 
+1

उपयोग उर्फ ​​'#TableA एक से चुनें * कहां A.ColumnA में' (#TableB बी से B.ColumnA का चयन करें) और त्रुटियों की जाँच –

+1

पहले से ही उत्तर दिया, यहाँ देखें: http://stackoverflow.com/ प्रश्न/5076906/कॉलम-करता-मौजूद नहीं है-इन-द-क्लॉज-लेकिन-एसक्यूएल-रन –

उत्तर

10

ColumnA #TableA की ColumnA जो चयन सूची में एक वैध स्तंभ है को दर्शाता है।

इसलिए वहाँ कोई त्रुटि है और आप एक वैध स्तंभ से कुछ भी अन्य लेकिन साथ Columna की जगह (उपरोक्त कथन को सत्यापित करना चाहते हैं, तो आप तीन पंक्तियों के बाद से आप # TableA.ColumnA

के साथ # TableA.ColumnA तुलना कर रहे हैं मिलता है उदाहरण के लिए कॉलमैब) आपको एक त्रुटि मिलेगी।

आप इस प्रयास करें:

CREATE TABLE #TableA (ColumnA VARCHAR(25)) 
CREATE TABLE #TableB (ColumnB VARCHAR(25)) 

INSERT INTO #TableA (ColumnA) VALUES('1') 
INSERT INTO #TableA (ColumnA) VALUES('2') 
INSERT INTO #TableA (ColumnA) VALUES('3') 

INSERT INTO #TableB (ColumnB) VALUES('1') 

SELECT * 
FROM #TableA 
WHERE ColumnA IN(SELECT ColumnAB FROM #TableB) 

व्यवहृत किया जा सकेगा

संदेश 207, स्तर 16, राज्य 1, रेखा 14
अमान्य स्तंभ नाम 'ColumnAB'।

+4

बहुत अच्छा है। इसे समझाने का एक और तरीका यह है कि स्पष्ट रूप से 'चयन * #TableA से कॉलम में कोई त्रुटि नहीं है (#TableB से 42 चुनें) '। Subquery के संदर्भ में, कॉलम ए, 42 की तरह, परिभाषित किया गया है, अगर सब कुछ का जवाब नहीं है। –

+0

मुझे गूंगा लगता है! आप 100% सही हैं, मैंने कई बार ऐसा किया है कि यह आंतरिक क्वेरी के WHERE खंड में बाहरी क्वेरी से कॉलम का उपयोग करने के लिए उपयोग किया जाता है। उदाहरण के लिए: 'का चयन करें * # टेबल टी कहां t.Id में (चयन मैक्स (tIn.Id) # टेबल टिन से कहां tIn.Column = t.Column)' \t \t \t \t से कुछ अजीब कारण मैंने इसे अलग देखा। –

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