Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Correção “ERROR 1250 (42000):A tabela ‘…’ de um dos SELECTs não pode ser usada na cláusula global ORDER” ao usar UNION no MySQL


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 |
+--------+