FROM में उपकेंद्र का एक उपनाम होना चाहिए


91

मेरे पास यह प्रश्न है कि मैंने PostgreSQL में लिखा है जो एक त्रुटि कहती है:

[त्रुटि] त्रुटि:
लाइन ३: FROM (SELECT DISTINCT (पहचाने जाने योग्य) AS__lyly_ccharge

यह पूरी क्वेरी है:

SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER = '0130'
    EXCEPT
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER != '0130'
)

मेरे पास Oracle में एक समान क्वेरी है जो ठीक काम करती है। एकमात्र बदलाव यह है कि मेरे पास EXCEPTओरेकल में है मैंने इसे MINUSप्रमुख शब्द से बदल दिया है । मैं पोस्टग्रेज के लिए नया हूं और यह नहीं जानता कि यह क्या मांग रहा है। इससे निपटने का सही तरीका क्या है?


3
यह मुझे ऐसा लगता है कि अपवाद पहले की तरह अनावश्यक है जहां खंड पहले से ही इसे स्वीकार करता है CALLEDNUMBER = '0130':।
क्लोडोल्डो नेटो

यह त्रुटि अभी भी Postgres 11 FWIW के साथ होती है ...
rogerdpack

जवाबों:


134

ALIASउपकुंजी पर जोड़ें ,

SELECT  COUNT(made_only_recharge) AS made_only_recharge
FROM    
    (
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER = '0130'
        EXCEPT
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER != '0130'
    ) AS derivedTable                           -- <<== HERE

18
@ जॉन इसके लिए धन्यवाद, लेकिन इसकी आवश्यकता क्यों है (मुझे लगता है कि मैं यहां एक सिद्धांत प्रश्न पूछ रहा हूं)?
एंड्रयू कैसिडी

1
@AndrewCassidy आपको परिभाषित करना होगा ताकि आप अपनी क्वेरी (WH व्युत्पन्न। <विशेषता> = 5) पर आगे की बाधाएं जोड़ पाएंगे। अन्यथा आपके डीबी को यह पता नहीं होगा कि
उपश्रमण

36
@AndrewCassidy यह सिर्फ अशुभ वाक्य रचना है। जब तक आप उस सबक्वेरी का संदर्भ नहीं दे रहे हैं, तब तक यह मायने नहीं रखता कि यह किस प्रकार का उपनाम है। व्यक्तिगत रूप से, मैं उपयोग कर रहा हूं AS pg_sucks, जिसका अर्थ है "ठीक है, यहाँ आपके पास कुछ निरर्थक पहचानकर्ता हैं, लेकिन आप अपने द्वारा कुछ आंतरिक रूप से उत्पन्न कर सकते हैं, लानत है!" :)
ट्रेगोरग

1

नेस्टेड टेबल के मामले में, कुछ DBMS को MySQL और Oracle की तरह एक अन्य नाम का उपयोग करने की आवश्यकता होती है, लेकिन अन्य को ऐसी सख्त आवश्यकता नहीं होती है, लेकिन फिर भी उन्हें आंतरिक क्वेरी के परिणाम को जोड़ने की अनुमति देता है।


1
आपका शब्दों का सुझाव वहाँ है दोनों Oracle और MySQL के लिए इस तरह के एक आवश्यकता। क्या मैं इसे सही पढ़ रहा हूं?
स्क्रैच

@Srratte मुझे लगता है कि आप सही हैं और शब्द घूम रहा है। "MySQL और Oracle लेकिन अन्य" होना चाहिए "Postgresql, लेकिन MySQL और Oracle के रूप में अन्य ssuch" मुझे लगता है। बेशक यह अभी भी एक रन-ऑन वाक्य है, और इसमें और सुधार किया जा सकता है। 2013 का उत्तर ठीक है और यह उत्तर कुछ नहीं जोड़ता है (यदि आप चाहते हैं तो 2013 के उत्तर पर टिप्पणी करें), इसलिए उत्तरार्द्ध को हटा दिया जाना चाहिए।
सीमित प्रायश्चित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.