Se você estiver recebendo o erro "1054 (42S22):Coluna desconhecida '…' na 'cláusula de pedido'" ao usar o
UNION
cláusula no MySQL, pode ser porque você está tentando fazer referência a uma coluna com alias pelo nome da coluna. Ao usar o
UNION
cláusula no MySQL, se uma coluna tiver um alias, você deve usar esse alias em qualquer ORDER BY
cláusula que faz referência a essa coluna. Portanto, para corrigir o erro, certifique-se de referenciar a coluna por seu alias. Como alternativa, você pode remover o alias e fazer referência ao nome da coluna diretamente.
Exemplo de erro
Aqui está um exemplo de código que produz o erro:
(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
ERROR 1054 (42S22): Unknown column 'TeacherName' in 'order clause'
Aqui tentei ordenar os resultados pelo
TeacherName
coluna, mas essa coluna tem um alias. O fato de não ter usado o alias no ORDER BY
cláusula foi suficiente para produzir o erro. Solução 1
Uma maneira de corrigir esse problema é usar o alias no
ORDER BY
cláusula:(SELECT TeacherName t FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY t ASC;
Resultado:
+--------+ | t | +--------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +--------+
Isso resolveu o problema.
Solução 2
Outra maneira de fazer isso é remover o alias completamente:
(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+