sql >> Base de Datos >  >> RDS >> PostgreSQL

Corrija "ERROR:falta la entrada de la cláusula FROM para la tabla" en PostgreSQL cuando se usa UNION, EXCEPT o INTERSECT

Si obtiene "ERROR:falta la entrada de la cláusula FROM para la tabla ” en PostgreSQL cuando se usa un operador como UNION , INTERSECT , o EXCEPT , podría deberse a que está calificando un nombre de columna con su nombre de tabla.

Para solucionar esto, elimine el nombre de la tabla o use un alias de columna.

Ejemplo de error

Aquí hay un ejemplo de código que produce el error:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY Teachers.TeacherName ASC;

Resultado:

ERROR:  missing FROM-clause entry for table "teachers"
LINE 4: ORDER BY Teachers.TeacherName ASC;

En este caso traté de ordenar los resultados por TeacherName columna, pero califiqué esa columna con el nombre de la tabla (utilicé Teachers.TeacherName para hacer referencia al nombre de la columna).

Hacer referencia a tablas como esta no funciona al ordenar los resultados de UNION , EXCEPT , o INTERSECT .

Solución 1

Una forma de solucionar este problema es eliminar el nombre de la tabla de ORDER BY cláusula:

(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;

Solución 2

Otra forma de solucionarlo es usar un alias para la columna:

(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;

Con esta opción, asignamos un alias a la columna y luego hacemos referencia a ese alias en el ORDER BY cláusula.