Jeśli otrzymujesz komunikat „BŁĄD:kolumna „nazwa kolumny” nie istnieje” ” w PostgreSQL podczas używania operatora takiego jak UNION
, EXCEPT
lub INTERSECT
, być może próbujesz odwołać się do kolumny z aliasem według jej nazwy.
Używając operatorów takich jak UNION
, INTERSECT
i EXCEPT
, jeśli kolumna ma alias, musisz użyć tego aliasu w dowolnym ORDER BY
klauzula odwołująca się do tej kolumny.
Aby naprawić błąd, po prostu odwołaj się do kolumny za pomocą jej aliasu.
Możesz też całkowicie usunąć alias i odnieść się bezpośrednio do nazwy kolumny.
Przykład błędu
Oto przykład kodu, który generuje błąd:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Wynik:
ERROR: column "teachername" does not exist LINE 4: ORDER BY TeacherName ASC;
Tutaj nie użyłem aliasu w ORDER BY
klauzula, która spowodowała błąd.
Rozwiązanie 1
Jednym ze sposobów rozwiązania tego problemu jest użycie aliasu w ORDER BY
klauzula:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Rozwiązanie 2
Inną opcją jest całkowite usunięcie aliasu:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;