2013-02-08 11 views
52

mam tej kwerendy Pisałem w PostgreSQL, która zwraca błąd mówiąc:podzapytanie w OD musi mieć alias

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

Jest cała zapytania:

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

Mam podobny zapytanie w Oracle, który działa dobrze. Jedyną zmianą jest to, że mam EXCEPT w Oracle. Zastąpiłem je słowem kluczowym MINUS. Jestem nowy w Postgresie i nie wiem, o co prosi. Jaki jest prawidłowy sposób postępowania z tym?

+1

Wydaje mi wyjątkiem jest niepotrzebny, jako pierwszy, gdy klauzula już WYJĄTKIEM go: 'CALLEDNUMBER =„0130''. –

Odpowiedz

72

dodać ALIAS na podzapytania,

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

@ JohnCześć dzięki za to, ale dlaczego jest potrzebna (myślę, że zadaję tutaj pytanie teoretyczne)? –

+0

@AndrewCassidy Musisz zdefiniować, aby móc dodawać kolejne ograniczenia do zapytania (WHERE derivTable: = 5). w przeciwnym razie baza danych nie będzie wiedzieć, w jaki sposób odwołać się do podzapytania. – stackhelper101

+9

@AndrewCassidy Jest to po prostu pechowa składnia. Dopóki nie odwołujesz się do tego podkwerendy, nie ma znaczenia, czym jest alias. Osobiście używam 'AS pg_sucks', co oznacza" no cóż, tutaj masz trochę zbędnego identyfikatora, ale możesz sam wygenerować wewnętrznie, cholerne postgres! " :) – Tregoreg

Powiązane problemy