select sum(valor), nome
from compras join compradores on
compras.comprador_id = compradores.id group by nome;
Reparei que o MySQL localizou a coluna nomes mesmo sem passar o nome qualificado compradores.nome.
Por que isso ocorre?
select sum(valor), nome
from compras join compradores on
compras.comprador_id = compradores.id group by nome;
Reparei que o MySQL localizou a coluna nomes mesmo sem passar o nome qualificado compradores.nome.
Por que isso ocorre?
Gabriel não entendi sua dúvida, poderia explicar um pouco melhor por favor ?
Gabriel, bom dia. Tudo bem?
A coluna nome foi exibida porque você solicita aqui:
select sum(valor), nome
você traz a soma dos valores, e a coluna nomes onde há o relacionamento.
Tranquilo? caso não seja isso, me desculpe e refaça a pergunta.
abraços.
Creio que entendi a dúvida do colega.
Na hora de vincular as tabelas, está sendo colocado primeiro o nome da tabela, depois um ponto e o nome do campo que se deseja utilizar (exemplo: compras.comprador_id).
Porem, na hora de listar, ou na hora de se aplicar a ordenação, esse formato não é utilizado, o nome do campo é usado direto sem fazer referência primeiro a tabela.
Eu não vi a estrutura das tabelas, mas, se não deu problema, é porque o campo nome existe apenas em 1 das tabelas utilizadas no join. Se houvesse um campo nome nas duas tabelas, não funcionaria, porque o mecanismo de banco de dados não saberia de qual tabela o campo nome deve ser retornado.
Para evitar esse problema pode ser usado o formato tabela.nome_do_campo. Uma forma diferente de fazer a mesma coisa seria usar um Alias, ou seja, dar um apelido para a tabela. Um exemplo:
select sum(B.valor) as total, A.nome from compras as A join compradores as B on B.comprador_id = A.id group by A.nome;
Boa Daniel, em todas minhas SQL's onde tem amarração de tabelas eu utilizo alias.
Bom, eu não li nenhuma resposta anterior, mas vou explicar:
repare que a tabela compras
e compradores
não possuem campos iguais, a não ser o campo ìd
. Então não há a necessidade de especificar o campo nome
para a tabela compradores
, sendo que na tabela compras
não possui o campo nome.
Vou dar um outro exemplo de código, este que usei:
select nome, sum(valor) as soma from
compras join compradores on
compras.id_comprador = compradores.id
group by nome;
Se, por acaso, eu não definir o id
para a tabela compradores
, aparece um erro de ambiguidade:
ERROR 1052 (23000): Column 'id' in on clause is ambiguous
Espero ter esclarecido a tua duvida =)