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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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 =)