2009-12-11 11 views
269

मैं MySQLMySQL में "प्रत्येक व्युत्पन्न तालिका का अपना उपनाम होना चाहिए" त्रुटि क्या है?

SELECT ID FROM (
    SELECT ID, msisdn 
    FROM (
     SELECT * FROM TT2 
    ) 
); 

पर इस क्वेरी चला रहा हूँ और यह इस त्रुटि दे रहा है:

Every derived table must have its own alias.

क्या जिसके कारण त्रुटि?

+13

क्या आप इसे "टीटी 2 से चुनिंदा आईडी" के रूप में सरल नहीं बना सकते? – DMKing

+2

मुझे हाल ही में यह त्रुटि मिली क्योंकि मेरे पास 'यूनियन ऑल' के साथ एक प्रश्न में अतिरिक्त '' 'था। – mpen

+9

यह देखकर कि यह # 1 Google खोज कैसे है ... स्वीकृत उत्तर वास्तव में त्रुटि का उत्तर नहीं देता है 'प्रत्येक व्युत्पन्न तालिका में अपना स्वयं का उपनाम होना चाहिए'। अधिक जानकारी के लिए नीचे देखें। –

उत्तर

380

प्रत्येक व्युत्पन्न तालिका (AKA उप-क्वेरी) में वास्तव में उपनाम होना चाहिए। अर्थात। ब्रैकेट में प्रत्येक क्वेरी को उपनाम (AS whatever) दिया जाना चाहिए, जिसे बाहरी बाहरी क्वेरी में संदर्भित करने के लिए इसका उपयोग किया जा सकता है।

SELECT ID FROM (
    SELECT ID, msisdn FROM (
     SELECT * FROM TT2 
    ) AS T 
) AS T 

आपके मामले में, जाहिर है, पूरे क्वेरी के साथ प्रतिस्थापित किया जा सकता:

SELECT ID FROM TT2 
+16

दिखाए गए नमूने कोड के लिए सही जवाब लेकिन इस प्रश्न को देखने वाले अधिकांश उपयोगकर्ताओं के लिए समाधान नहीं। – ToBe

+1

@ToBe मैं उत्सुक हूं कि आप इसका क्या मतलब रखते हैं? उत्तर किसी भी प्रश्न में सच है, कि अगर आपके पास खंड से आपकी व्युत्पन्न तालिका है तो आपको इसे उपनाम देना होगा। – AdamMc331

+2

क्षमा करें, मैंने नहीं देखा कि आपने मूल क्वेरी भी तय की है और 'AS' कथन जोड़ा है। मैंने सोचा कि आपने केवल शॉर्टेंड दिखाया है। मेरे डाउनवोट को हटा दिया। – ToBe

64

मुझे लगता है कि आप ऐसा करने पूछ रहा है:

SELECT ID 
FROM (SELECT ID, 
      msisdn 
     FROM (SELECT * FROM TT2) as myalias 
    ) as anotheralias; 

लेकिन तुम क्यों पहली जगह में इस क्वेरी लिखना चाहते हैं?

+8

वास्तविक क्वेरी बहुत लंबी है .. मैंने इसे इतना छोटा कर दिया है कि यहां लोगों को समझने में कम समय है। छोटी और लंबी क्वेरी पर त्रुटि समान थी। – silverkid

+0

अब मैं समझता हूं। मैं यह भी सोच रहा था कि यह कुछ कोड द्वारा उत्पन्न हो सकता है। पॉल और डीएमकिंग ने सुझाव दिया कि इसे अभी भी सरल बनाना चाहिए। – hometoast

+8

वाह, क्या यह वास्तव में अस्वीकार्य दूसरा उत्तर है? समस्या वाले किसी भी व्यक्ति के लिए यह जवाब है, MySQL के लिए आपको कई अन्य कार्यान्वयन की तरह इसे छोड़कर "उप क्वेरी" लेबल करने की आवश्यकता है। –

11

यहाँ एक अलग उदाहरण है कि (नहीं GROUP BY DISTINCT कर सकते हैं) उपनाम के बिना फिर से लिखा नहीं किया जा सकता है।

purchases नामक एक मेज कि stores पर customers द्वारा की गई खरीद के रिकॉर्ड, यानी कल्पना कीजिए कि यह कई मेज पर एक कई है और सॉफ्टवेयर को पता है जो ग्राहकों को एक से अधिक की दुकान पर खरीद बना दिया है की जरूरत है:

SELECT DISTINCT customer_id, SUM(1) 
    FROM (SELECT DISTINCT customer_id, store_id FROM purchases) 
    GROUP BY customer_id HAVING 1 < SUM(1); 

। त्रुटि Every derived table must have its own alias के साथ तोड़ देगा। ठीक करने के लिए:

SELECT DISTINCT customer_id, SUM(1) 
    FROM (SELECT DISTINCT customer_id, store_id FROM purchases) AS custom 
    GROUP BY customer_id HAVING 1 < SUM(1); 

(नोट AS custom उर्फ)।

+0

सबक्वायरी पर एसयूएम (1) का प्रभाव क्या है? –

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