Jump to content

Cruzamento de 3 tabelas


Mysteriis
 Share

Recommended Posts

Boas 😉

Este é o meu problema:

Eu tenho 3 tabelas relacionadas, e preciso de alguns resultados do cruzamento entre as 3. Não sei se a forma como esquematizei a bd seja a melhor....

http://img821.imageshack.us/img821/6562/esquemau.jpg

Em cima demonstra como as tabelas estão relacionadas, e em baixo o resultado que eu pretendia do cruzamento das 3.

Para cruzar apenas as tabelas Fornecedores e Marcas bastava-me fazer:

SELECT fornecedor, count(fornecedorFk)
FROM fornecedores left join marcas ON idFornecedor = fornecedorFk
GROUP BY fornecedorFk
ORDER BY fornecedor
e isto dava-me o nome do fornecedor e quantidade de marcas que pertencem aquele fornecedor. Mas se tentar fazer outro left join com a tabela Artigos não me produz o resultado pretendido que era o nome do fornecedor, numero de marcas pertencentes ao fornecedor, e numero de artigos pertencentes ás marcas daquele fornecedor.

Se alguém me poder ajudar........

Cumprimentos

Mysteriis

Link to comment
Share on other sites

Usa o INNER JOIN.

Junta 1º fornecedores ao Marcas idFornecedor = fornecedorFk

Junta o que tens ao artigos idMarca = marcafk

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Produz o mesmo resultado 😉 !! ou então estou a implementar mal...

SELECT fornecedor, count(fornecedorFk), count(marcaFk)
FROM fornecedores inner join marcas ON idFornecedor = fornecedorFk inner join artigo on idMarca = marcaFk
GROUP BY fornecedorFk
ORDER BY fornecedor
Link to comment
Share on other sites

Dá um exemplo concreto do resultado final

Fornecedor   | Marcas | Artigos
-------------+--------+----------------
Fornecedor 1 |      3 | Art1, Art2, Art5
Fornecedor 7 |      2 | Art1, Art3, Art4, Art5, Art6, Art7

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Cria uma view para contares os artigos de cada marca

create view conta_artigos as
select idMarca, count(idArtigo) as conta
from marcas inner join artigos on idmarca = marcafk
group by idMarca

Depois junta as tabelas fornecedores, marcas e a nova view com count e sum

select idFornecedor, count(idMarca), sum(conta)
from fornecedores, marcas, conta_artigos -- nao sei fazer INNER JOINs
where idFornecedor = fornecedorfk and marcas.idMarca = conta_artigos.idMarca
group by idFornecedor

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Funciona pmg!!! Muito obrigado pela solução 😉

Completo o script com left join's, porque se não usar, os fornecedores que tenham marcas sem artigos não aparecem...

SELECT fornecedor, count(marcas.id_marca), sum(conta) 
FROM fornecedores left join marcas on idFornecedor = fornecedorFk left join conta_artigos on marcas.id_marca= conta_artigos.id_marca 
GROUP BY fornecedor

Obrigado também ao bruno por tentar ajudar!!!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.