दिलचस्प पोस्ट
बाश कमांड लाइन तक पहुंच $ $ बनाम $ $ जावा: मजबूत / नरम / कमजोर / प्रेत संदर्भ में अंतर त्रुटि "उपसर्ग कमांड लाइन क्लाइंट का उपयोग नहीं कर सकता: svn" जब एंड्रॉइड प्रोजेक्ट को svn से चेक आउट किया गया यूनिट्स के लिए लिनक्स बनाम ग्रुपजॉइन में शामिल हों पृष्ठ पुनः लोड पर मेनू स्थिति कैसे रखनी है मैं Xcode में मैक एप्लिकेशन के लिए आइकन कैसे सेट कर सकता हूं? सीएसएस सामग्री की संपत्ति: क्या टेक्स्ट के बजाय एचटीएमएल सम्मिलित करना संभव है? टॉमकैट में डिफॉल्ट सर्विसलेट के लिए विशिष्ट सर्विसलेट को मैप करना मैं LINQ का उपयोग कर एक संख्या के बाद पाठ की एक स्ट्रिंग कैसे सॉर्ट कर सकता हूं वर्तमान ऑब्जेक्ट ($ इस) को एक वंशज वर्ग में कास्ट करें AllowDefinition = 'MachineToApplication' के रूप में पंजीकृत अनुभाग का उपयोग करने के लिए त्रुटि एप्लिकेशन स्तर से परे जावास्क्रिप्ट में ऑब्जेक्ट हटाना जावा: क्लास.इस इन्स्टैन्स बनाम क्लास.इस एसेग्नेबल वास्तव में विराम की समस्या क्या है? खींचें-और-गिराए गए फ़ाइल लोड करने से ब्राउज़र को रोकें

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

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

Solutions Collecting From Web of "ओआरए-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 ) 

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