Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 4 da Aula 5 - Fazendo relacionamento entre tabelas

Acredito que a resposta esteja incorreta: select c1.id, c1.valor, c2.id, c2.valor from compras c1, compras c2 where c1.valor = c2.valor;

Como resultado desta consulta, traríamos o mesmo registro dos dois lados, como por exemplo: 1 | 50 | 1 | 50

Acredito que a resposta correta seja:

SELECT c1.id, c1.valor, c2.id, c2.valor FROM compras c1, compras c2 WHERE c1.valor = c2.valor AND c1.id != c2.id

Adicionando a condição c1.id != c2.id garantimos que os registro sejam diferentes, apenas com o valor igual.

3 respostas

Diego no exercício esta sendo feita a select para pegar os mesmos valores duas vezes, por tanto, esta correta.

Caso a intenção fosse pegar valores diferentes seria outra sql.

solução!

As duas repostas estariam corretas, nenhuma condição foi adicionada que restringisse trazer compras com mesmo id. Mas faz sentido não considerar compras com mesmo o id, vou modificar a resposta para a sua ser a correta e a outra poder ser aceita.

Obrigado pela observação.

O resultado apresentado pela resolução do exercício não retorna os registros de forma correta. Com o SQL apresentado ele retorna a combinação de todos os resultados desejados, gerando assim uma massa de dados indesejável. O ideal seria utilizar alguma estrutura para limitar essas repetições, com fim de apresentar apenas uma vez cada compra. Seguem abaixo algumas sugestões:

SELECT distinct c1.id, c1.valor, c1.observacao FROM compras c1, compras c2 WHERE c1.valor=c2.valor and c1.id <> c2.id

SELECT distinct c1.id, c1.valor, c1.observacao FROM compras c1 join compras c2 on c1.valor=c2.valor and c1.id <> c2.id

SELECT from compras WHERE valor in (SELECT valor FROM COMPRAS GROUP BY valor HAVING count ()>1) ORDER by id

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software