2009-06-29 15 views
23

जब एसक्यूएल 2005 में इस क्वेरी चलाने का प्रयास कर रहा निम्न त्रुटि हो रही है:एसक्यूएल 2005 - कॉलम का उल्लेख किया गया था कई बार

SELECT tb.* 
    FROM (
     SELECT * 
     FROM vCodesWithPEs INNER JOIN vDeriveAvailabilityFromPE 
     ON vCodesWithPEs.PROD_PERM = vDeriveAvailabilityFromPE.PEID 
     INNER JOIN PE_PDP ON vCodesWithPEs.PROD_PERM = PE_PDP.PEID 
    ) AS tb; 

Error: The column 'PEID' was specified multiple times for 'tb'. 

मैं एसक्यूएल करने के लिए नया हूँ। आपकी सलाह के लिए अग्रिम धन्यवाद।

एनियो।

+2

बस जिज्ञासा से बाहर, तुम क्यों बाहरी "टीबी का चयन करें। *" क्या ज़रूरत है? – NotMe

उत्तर

33

समस्या, के रूप में उल्लेख किया है, यह है कि आप दो तालिकाओं से PEID चयन कर रहे हैं है, समाधान है, जो PEID आप चाहते हैं निर्दिष्ट करने के लिए है, उदाहरण के लिए

SELECT tb.* 
    FROM (
     SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on 
     FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2 
     ON tb1.PROD_PERM = tb2.PEID 
     INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID 
    ) AS tb; 

कि एक तरफ, क्रिस जीवंत रूप में चतुराई से बाहर में बताते हैं एक टिप्पणी बाहरी चयन पूरी तरह से अनिवार्य है। निम्नलिखित पहले के बराबर है।

 SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on 
     FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2 
     ON tb1.PROD_PERM = tb2.PEID 
     INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID 

या यहाँ तक कि

 SELECT * 
     FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2 
     ON tb1.PROD_PERM = tb2.PEID 
     INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID 

लेकिन कृपया से बचने का चयन का उपयोग कर * जब भी संभव हो। जब आप टाइपिंग को सहेजने के लिए इंटरैक्टिव क्वेरी कर रहे हों तो यह काम कर सकता है, लेकिन उत्पादन कोड में इसका कभी भी उपयोग नहीं होता है।

4

ऐसा लगता है कि स्तंभ PEID दोनों तालिकाओं में है: vDeriveAvailabilityFromPE और PE_PDPSELECT कथन दोनों का चयन करने का प्रयास करता है, और डुप्लिकेट कॉलम नाम के बारे में त्रुटि देता है।

+0

वह दोनों टेबलों में है, न केवल दिखता है :) –

+0

आप सही हैं, विंको। :-) एक sidenote पर: क्यों मेरा दूसरा टेबल नाम इटालिक्स में प्रदर्शित नहीं होता है? (इसे * * में रखें, लेकिन * PE_PDP * के रूप में प्रदर्शित होता है) पूर्वावलोकन सही है। – MicSim

+0

मुझे नहीं पता, मुझे लगता है कि uservoice के लिए मुद्दा। मैंने कुछ सामान्य चाल (रिक्त स्थान या सुधार जोड़ने) की कोशिश की लेकिन यह –

1

आप तीन तालिकाओं में शामिल हो रहे हैं, और आउटपुट (*) में सभी कॉलम देख रहे हैं।

ऐसा लगता है कि टेबलों में एक आम कॉलम नाम पीईआईडी है, जिसे आप किसी और चीज के रूप में उपनाम करना चाहते हैं।

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

0

सभी फ़ील्ड एकत्र करने की पहचान करने के लिए * का उपयोग करने के बजाय, अपनी इच्छित क्वेरी को स्पष्ट रूप से नाम देने के लिए अपनी क्वेरी को दोबारा लिखें। इस तरह कोई भ्रम नहीं होगा।

0

बस स्तंभ को दोहराता है, यह मेरे लिए काम किया के लिए नया उपनाम नाम दे .....

+2

नाम में अंडरस्कोर पसंद नहीं है कृपया अपने समाधान को संपादित करने के बारे में अधिक जानकारी देने के लिए अपने उत्तर को संपादित करने पर विचार करें काम करता है। यह ओपी और किसी भी व्यक्ति की मदद करेगा जिसकी भविष्य में एक ही समस्या है – CallumDA

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