Mam takie zapytanie, które napisałem w PostgreSQL, które zwraca błąd:
[Err] ERROR:
LINE 3: FROM (SELECT DISTINCT (identifiant) AS made_only_recharge
To jest całe zapytanie:
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 podobne zapytanie w Oracle, które działa dobrze. Jedyną zmianą jest to, że mam EXCEPT
w Oracle, które zastąpiłem MINUS
słowem kluczowym. Jestem nowy w Postgres i nie wiem, o co prosi. Jaki jest właściwy sposób radzenia sobie z tym?
sql
oracle
postgresql
subquery
roykasa
źródło
źródło
CALLEDNUMBER = '0130'
.Odpowiedzi:
dodaj
ALIAS
do 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
źródło
AS pg_sucks
, co oznacza "cóż, tutaj masz jakiś nadmiarowy identyfikator, ale możesz sam wygenerować trochę wewnętrznie, cholera postgres!" :)W przypadku tabel zagnieżdżonych niektóre DBMS wymagają użycia aliasów, takich jak MySQL i Oracle, ale inne nie mają tak ścisłego wymogu, ale nadal pozwalają na ich dodanie, aby zastąpić wynik zapytania wewnętrznego.
źródło