दिलचस्प पोस्ट
एसक्यूएल सर्वर एसपी – "IN" सरणी सूची के लिए पैरामीटर पास करें? X-Forwarded-Proto HTTP शीर्षलेख का पूर्ण विवरण क्या है? क्यों नहीं चर-लंबाई सरणियों सी + + मानक का हिस्सा हैं? दो अलग-अलग कॉलमों के लिए किसी अन्य एसक्यूएल तालिका से मिलान डेटा कैसे प्राप्त करें: इनर जॉइन एंड / या यूनियन? एक पिक्सेल संपादक के लिए ग्रिड का एक प्रकार चाहते हैं यूनिकोडडेकोड त्रुटि: 'utf8' कोडेक स्थिति 3-6 में बाइट को डीकोड नहीं कर सकता: अमान्य डेटा गतिशील जेएसएएन ऑब्जेक्ट के लिए वेरिएबल नेम वैल्यू युग्म जोड़ें सरणी, ढेर और ढेर और मूल्य प्रकार आईआईएस पर एक PHP को फ़ॉर्म पोस्ट करते समय एक HTTP 405 "अमान्य विधि (HTTP क्रिया)" त्रुटि का कारण बनता है? क्यों। नेट स्ट्रिंग अपरिवर्तनीय है? दायां कोष्ठक के साथ कम-अल्फा क्रमबद्ध सूची (एचटीएमएल)? सी # सरणियाँ धागा सुरक्षित हैं? टेक्स्ट या एनटेक्स्ट डेटाटाइप पर जगह देने के विकल्प एकाधिक सीएसवी फ़ाइलों को पंडों में आयात करें और एक डेटाफ़्रेम में जोड़ दें एंड्रॉइड- जेसन एरे और जेएसएएन ऑब्जेक्ट बनाएं

ओआरए-00 9 18: कॉलम अस्पष्ट ढंग से चयन में परिभाषित *

ORA-00918 प्राप्त करना: कॉलम अस्पष्ट ढंग से परिभाषित किया गया है: इस एसक्यूएल चलाना:

SELECT * FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25 

कृपया कोई सुझाव?

वेब के समाधान से एकत्रित समाधान "ओआरए-00 9 18: कॉलम अस्पष्ट ढंग से चयन में परिभाषित *"

एक क्वेरी का प्रक्षेपण केवल दिए गए नाम का एक उदाहरण हो सकता है। जैसा आपकी WHERE क्लॉज दिखाता है, आपके पास आईडी वाला कॉलम वाला कई टेबल हैं क्योंकि आप चुन रहे हैं * आपके प्रक्षेपण में आईडी नामक कई कॉलम होंगे या ओएआरए 00 9 18 को कम्पाइलर हर्लिंग के लिए नहीं होता है

इसका समाधान बहुत आसान है: आपको नामित कॉलम का स्पष्ट रूप से चयन करने के लिए प्रक्षेपण का विस्तार करना होगा। उसके बाद आप डुप्लिकेट कॉलम छोड़ सकते हैं, बस (कहते हैं) COACHES.ID को बनाए रख सकते हैं या स्तंभ उपनामों का उपयोग कर सकते हैं: coaches.id as COACHES_ID

शायद वह आपको बहुत टाइपिंग के रूप में मारता है, लेकिन यह एकमात्र तरीका है यदि यह कोई आराम है, तो SELECT * को उत्पादन कोड में बुरा व्यवहार माना जाता है: स्पष्ट रूप से नामित स्तंभ अधिक सुरक्षित होते हैं।

आपके पास कई कॉलम हैं जो आपके इनर क्वेरी में एक ही चीज़ के नाम से हैं, इसलिए त्रुटि को बाहरी क्वेरी में उठाया गया है। यदि आप बाह्य क्वेरी से छुटकारा पाती हैं, तो इसे चलाना चाहिए, हालांकि अभी भी भ्रमित हो सकता है:

 SELECT DISTINCT coaches.id, people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id WHERE rownum <= 25 

यह बिल्कुल बेहतर होगा (पठनीयता और प्रदर्शन दोनों के लिए), ठीक से निर्दिष्ट करने के लिए कि उन सभी को चुनने के बजाय प्रत्येक तालिकाओं में से किस फ़ील्ड की आवश्यकता है तो अगर आपको वास्तव में अलग-अलग तालिकाओं से एक ही चीज़ को दो फ़ील्ड की आवश्यकता है, तो उनके बीच अंतर करने के लिए कॉलम एलियास का उपयोग करें

आप एक संघ के लिए चयन करते समय भी इस त्रुटि को देख सकते हैं, जहां संबंधित कॉलम शून्य हो सकते हैं।

 select * from (select D.dept_no, D.nullable_comment from dept D union select R.dept_no, NULL from redundant_dept R ) 

यह जाहिरा तौर पर पार्सर को भ्रमित करता है, एक समाधान हमेशा रिक्त स्तंभ के लिए एक स्तंभ उपनाम निर्दिष्ट करना है

 select * from (select D.dept_no, D.comment from dept D union select R.dept_no, NULL "nullable_comment" from redundant_dept R ) 

उपनाम को इसी कॉलम के समान नहीं होना पड़ता है, लेकिन परिणाम में कॉलम हेडिंग यूनियन सदस्यों में से पहली क्वेरी से संचालित होती है, इसलिए यह शायद एक अच्छा अभ्यास है