使用JOIN对MySQL查询进行排序

时间:2012-08-16 14:18:16

标签: mysql join phpmyadmin

当我尝试在phpmyadmin结果上订购我的列时,我收到错误。 这是错误:

enter image description here

我的查询是:

SELECT Cliente.Codigo, Cliente.Nome, Contato.Nome, Grupo.Nome FROM Cliente JOIN Grupo ON ( Grupo.codigo = Cliente.Codigo_Grupo ) JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) GROUP BY Cliente.Codigo ASC

当我点击列标题时,自动添加了ORDER BY。 有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我怀疑这是错误的SQL:尝试

SELECT Cliente.Codigo AS Codigo, Cliente.Nome, Contato.Nome AS Contato, Grupo.Nome AS Grupo 
FROM Cliente 
JOIN Grupo ON ( Grupo.codigo = Cliente.Codigo_Grupo ) 
JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) 
GROUP BY Cliente.Codigo 
ORDER BY `Grupo` ASC
LIMIT 0,30

在评论中讨论后,结果表明,框架中的底层错误是罪魁祸首: - Grupo.Nome上没有别名,它会阻塞Nome部分 - 使用Grupo.Name上的别名,它会阻塞别名

有一个非常非常脏的方法 - 但请注意,这是一种解决方法(充其量),而不是解决方案

这样做一次:

CREATE VIEW GrupoWorkaround SELECT Grupo.*,Grupo.Nome AS Grupo FROM Grupo

这将创建一个平行视图。

不将您的查询更改为

SELECT Cliente.Codigo AS Codigo, Cliente.Nome, Contato.Nome AS Contato, GrupoWorkaround.Grupo
FROM Cliente 
JOIN GrupoWorkaround ON ( GrupoWorkaround.codigo = Cliente.Codigo_Grupo ) 
JOIN Contato ON ( Contato.Codigo_Cliente = Cliente.Codigo ) 
GROUP BY Cliente.Codigo 
ORDER BY `Grupo` ASC
LIMIT 0,30

实际上用Grupo替换GrupoWorkaround,从而无需使用别名。