Se você estiver recebendo um erro que diz “ERROR 1250 (42000):A tabela ‘…’ de um dos SELECTs não pode ser usada na cláusula ORDER global” ao usar o
UNION
cláusula em uma consulta MySQL, provavelmente é porque você está qualificando um nome de coluna com seu nome de tabela. Isso não funciona no MySQL.
Para corrigir esse problema, 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 1250 (42000): Table 'Teachers' from one of the SELECTs cannot be used in global ORDER clause
Aqui 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). O MySQL não permite que tabelas sejam referenciadas desta forma ao ordenar os resultados de um
UNION
Operação. Solução 1
Uma maneira de corrigir isso é remover o nome da tabela do
ORDER BY
cláusula:(SELECT TeacherName FROM Teachers)
UNION
(SELECT StudentName FROM Students)
ORDER BY TeacherName ASC;
Resultado:
+-------------+ | TeacherName | +-------------+ | Ben | | Bill | | Cathy | | Ein | | Faye | | Jet | | Spike | | Warren | +-------------+
Solução 2
Se a opção anterior não for adequada, outra maneira de corrigir o problema é usar um alias. Em outras palavras, atribua um alias à coluna e faça referência a esse 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 | +--------+