Si recibe "ERROR:la columna "nombre de columna" no existe" ” en PostgreSQL cuando se usa un operador como UNION
, EXCEPT
, o INTERSECT
, puede ser que esté tratando de hacer referencia a una columna con alias por su nombre de columna.
Al usar operadores como UNION
, INTERSECT
y EXCEPT
, si una columna tiene un alias, deberá usar ese alias en cualquier ORDER BY
cláusula que hace referencia a esa columna.
Para corregir el error, simplemente haga referencia a la columna por su alias.
O podría eliminar el alias por completo y hacer referencia al nombre de la columna directamente.
Ejemplo de error
Aquí hay un ejemplo de código que produce el error:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
ERROR: column "teachername" does not exist LINE 4: ORDER BY TeacherName ASC;
Aquí no usé el alias en ORDER BY
cláusula que resultó en el error.
Solución 1
Una forma de solucionar este problema es usar el alias en ORDER BY
cláusula:
(SELECT TeacherName t FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Solución 2
Otra opción es eliminar el alias por completo:
(SELECT TeacherName FROM Teachers)
EXCEPT
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;