Se você está recebendo “ERRO:faltando a entrada da cláusula FROM para a tabela ” no PostgreSQL ao usar um operador como
UNION
, INTERSECT
, ou EXCEPT
, pode ser porque você está qualificando um nome de coluna com seu nome de tabela. Para corrigir isso, remova o nome da tabela ou use um alias de coluna.
Exemplo de erro
Aqui está um exemplo de código que produz o erro:
(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;
Neste caso tentei ordenar os resultados pelo
TeacherName
coluna, mas qualifiquei essa coluna com o nome da tabela (usei Teachers.TeacherName
para referenciar o nome da coluna). A referência de tabelas como esta não funciona ao ordenar os resultados de
UNION
, EXCEPT
, ou INTERSECT
. Solução 1
Uma maneira de corrigir esse problema é remover o nome da tabela do
ORDER BY
cláusula:(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Solução 2
Outra maneira de corrigi-lo é usar um alias para a coluna:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Com esta opção, atribuímos um alias à coluna e, em seguida, referenciamos esse alias no
ORDER BY
cláusula.