2012-12-26 10 views
8

फेंकना चाहिए मैंने क्रमशः एक कॉलम प्रत्येक, एबीसी और xyz के साथ दो टेबल, टी 1 और टी 2 बनाए हैं। मैंने प्रत्येक तालिका में 2 पंक्तियां (संख्यात्मक मान 1 और 2) डाली हैं।हटाएं कथन - उप क्वेरी को त्रुटि

जब मैं "select abc from t2" कमांड चलाता हूं, तो यह एक त्रुटि फेंकता है कि कॉलम एबीसी तालिका टी 2 में मौजूद नहीं है। हालांकि, जब मैं "delete from t1 where abc in (SELECT abc from t2);" कमांड चलाता हूं, तो 2 पंक्तियां हटा दी जाती हैं।

क्या हटाना विफल नहीं होना चाहिए क्योंकि मैंने उप-क्वेरी में विफल वही कथन का उपयोग किया है?

तालिका टी 1 (एबीसी संख्या) बनाएं; --टेबल बनाया गया

तालिका टी 2 (xyz संख्या) बनाएं; --टेबल बनाया गया

टी 1 मानों (1) में डालें; - एक पंक्ति डाली गई

टी 1 मानों (2) में डालें; - एक पंक्ति डाली गई

टी 2 मानों (1) में डालें; - एक पंक्ति डाली गई

टी 2 मानों (2) में डालें; - एक पंक्ति डाली गई

टी 2 से एबीसी चुनें; --ORA-00904 -> क्योंकि कॉलम एबीसी टी 2

टी 1 से हटाता है जहां एबीसी (टी 2 से चयन एबीसी) में मौजूद नहीं है; -2 पंक्तियों को हटा दिया

+3

मुझे लगता है कि ऐसा इसलिए है क्योंकि 'DELETE' कथन में' abc' का अर्थ 't1' – luiges90

+0

में' abc' का अर्थ है आपकी अंतिम क्वेरी में चयन करने का प्रयास करने के लिए कि कौन सी पंक्तियां वापस आती हैं, फिर आप आपके पास एक बेहतर विचार होगा कि एबीसी मूल्य वापस लौटाए जा रहे हैं –

+0

आपके उत्तरों के लिए धन्यवाद। जब मैं उपनाम का उपयोग करता हूं "टी 1 से हटाएं जहां एबीसी (टी 2 से टी 2.एबीसी चुनें), तो यह एक त्रुटि फेंकता है। लेकिन क्या इसे बिना किसी त्रुटि के फेंकना चाहिए क्योंकि मैंने" टी 2 से एबीसी का चयन किया है "? – Orangecrush

उत्तर

11

क्या आप वाकई तालिका t2 स्तंभ चयनित हो रही है बनाने के लिए उपनाम के रूप में तालिका नामों का उपयोग करें, तो आप अपने मूल प्रश्न में नाकाम रहने नहीं है यानी

delete from t1 where abc in (SELECT t2.abc from t2); --ORA-00904 

त्रुटि प्राप्त होगी क्योंकि यह तालिका t1के कॉलम का उपयोग कर रहा है क्योंकि तालिका t1 सबक्वायरी में दिखाई दे रही है।

1

आपका हटाएं कथन एबीसी कॉलम नाम के कारण काम कर रहा है जिसका आपने उपयोग किया है, जहां स्थिति है। उप क्वेरी कहां स्थित है, जहां स्थित स्थिति कॉलम के आधार पर, becz हम तालिका उपनाम नाम का उपयोग नहीं करते हैं।

यू इन प्रश्नों

चयन देखते हैं * t1 से जहां में (टी 2 से एबीसी का चयन करें) एबीसी; - यह 2 पंक्तियां

* टी 1 से चुनें जहां एबीसी (टी 2 से 1 चुनें); - यह 1 पंक्ति

* टी 1 से चुनें जहां एबीसी (टी 2 से 2 चुनें); - यह दूसरी पंक्ति

टी 1 से * चुनें जहां एबीसी (टी 2 से 3 चुनें); - डी डेटा प्राप्त नहीं होगा

* टी 1 से चुनें जहां एबीसी (टी 2 से चयन एचजी); - अमान्य पहचानकर्ता

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