2013-02-08 11 views
52

Ich habe diese Abfrage, die ich in PostgreSQL geschrieben haben, die einen Fehler zurückgibt sagen:Unterabfrage in FROM müssen einen Alias ​​haben

[Err] ERROR:
LINE 3: FROM (SELECT DISTINCT (identifiant) AS made_only_recharge

Das ist die ganze Abfrage:

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' 
) 

ich eine ähnliche Frage haben in Oracle, das funktioniert gut. Die einzige Änderung ist, wo ich EXCEPT in Oracle habe Ich habe es mit dem MINUS Schlüsselwort ersetzt. Ich bin neu in Postgres und weiß nicht, wonach es fragt. Wie ist der richtige Umgang damit?

+1

Es sieht für mich die Ausnahme als die ersten nicht notwendig ist, wo Klausel bereits excepts es: 'CalledNumber =‚0130''. –

Antwort

72

ein ALIAS auf der Unterabfrage hinzufügen,

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 
+9

@JohnWoo danke dafür, aber warum wird es benötigt (ich denke ich stelle hier eine Theoriefrage)? –

+0

@AndrewCassidy Sie müssen definieren, so dass Sie weitere Einschränkungen für Ihre Abfrage hinzufügen können (WHERE derivedTable. = 5). andernfalls wird Ihre Datenbank nicht wissen, wie sie auf die Unterabfrage verweist. – stackhelper101

+9

@AndrewCassidy Es ist nur unglückliche Syntax. Solange Sie nicht auf diese Unterabfrage verweisen, spielt es keine Rolle, welcher Aliasname gemeint ist. Persönlich verwende ich 'AS pg_sucks', was bedeutet:" Nun, hier hast du einen redundanten Bezeichner, aber du könntest sie intern selbst generieren, verdammt postgres! " :) – Tregoreg

Verwandte Themen