दिलचस्प पोस्ट
मैं दो छवियों के बीच अंतर कैसे तय करूं? किसी डेटासेट में अलग पंक्तियों को कैसे चुनें और किसी सरणी में स्टोर करें बिटमैप आकार बदलने के बिना कैसे बिटमैप को सेकेंड करना है? संख्याओं के एक सरणी से न्यूनतम या अधिकतम मूल्य प्राप्त करने का सबसे अच्छा तरीका क्या है? सी # और जावा के बीच मुख्य अंतर क्या हैं? पोर्ट 80 ईसी 2 खोलने के लिए अमेज़ॅन वेब सेवाओं हेडर और पाद लेख को विंडो से हटाएं। प्रिंट () जावा टेक्स्ट एडिटर्स के लिए एक्लिप्स् में मैं फ़ॉन्ट आकार कैसे बदल सकता हूँ? जावा में String.split () के साथ सीमांकक के रूप में मैं "" कैसे उपयोग कर सकता हूं अजगर कुंजीशब्द "के साथ" के लिए प्रयोग किया जाता है? C से C ++ फ़ंक्शन कैसे कॉल करें? डिस्प्ले इनलाइन ब्लॉक कॉलम का उपयोग करना नीचे चलना है एप्पल एफएफटी का उपयोग करना और फ्रेमवर्क तेज करना मैवेन जेएक्सबी प्लगिन का अंतर आईओएस 8 में नियंत्रक अभिविन्यास को देखने के लिए मजबूर कैसे करें?

ओआरए-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 ) 

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