Jump to content

Archived

This topic is now archived and is closed to further replies.

rogerss_7

Relacionar tabelas usando método Load

Recommended Posts

Olá, tenho tabelas nesta estrutura

 

----tb_customer----
id_customer

----tb_history----
id_history
id_customer
id_typehistory

----tb_typehistory----
id_typehistory

 

Meu objeto principal é tb_customer.

 

Obrigado.

Share this post


Link to post
Share on other sites
select a.id_customer, b.id_history, c.id_typehistory from tb_customer a
inner join tb_history b on a.id_customer = b.id_customer
inner join tb_typehistory c on b.id_typehistory = c.id_typehistory;

 

A relação dessas tabelas ficaria desta forma.

Share this post


Link to post
Share on other sites

Obrigado Roberto, mas tenho um problema que é em relação ao join.

tb_history pode não ter dados de tb_typehistory
tb_history pode não ter dados de tb_customer

O correto seria um left join, mas já tentei e não consigo fazer funcionar um left join desta maneira. Por isso estava tentando Load, que aliás estava funcionando até relacionar com tb_typehistory.

Share this post


Link to post
Share on other sites

Sim, da maneira que é lida a estrutura o seu comentário está correto.

 

Mas vou explicar como estou fazendo.

 

Estou criando uma lista do tipo tb_customer, após isso eu carrego tb_history e deveria também carregar tb_typehistory, para ser usado em outro momento.

Share this post


Link to post
Share on other sites

não esqueça do relacionamento entre as tabelas, na verdade, a importância de uma modelagem de dados bem definida até os mínimos detalhes, como os campos de relacionamentos, um velho ditado diz, que um relacionamento bem definido é a alma do aplicativo, pois daí saem todas as consultas e operações com o banco, influenciando diretamente na otimização e performance do aplicativo

Share this post


Link to post
Share on other sites

Diferenças entre LEFT, RIGHT e INNER


Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que ele deve obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join o banco de dados irá analisar a estrutura da tabela da Direita e comparar com a tabela da Esquerda (leia-se Direita para a Esquerda), veja o desenho.


joins.jpg

Left Join
Na primeira situação temos o Left Join, a seta está apontando para a tabela FUNCIONARIOS simbolizando que a precedência é da tabela da Esquerda, então podemos dizer que no select abaixo, serão listados todos os Funcionários, mesmo aqueles que não tem Filial cadastrada.


SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
LEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO

-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2
PEDRO null
Repare que Pedro foi incluído no resultado, porém ele não possui uma Filial associada em seu cadastro. Este tipo de Join é o mais utilizado quando não se tem certeza que todos os registros possuem ligação entre as tabelas e também na maioria das vezes por questões de desempenho.

 

Right Join
Na segunda situação foi utilizado o Right Join, também conhecido apenas por Join, que aponta para a tabela FILIAL simbolizando a precedência da tabela da Direita, logo, concluímos que os dados da tabela Filial devem existir para que o registro seja trazido no Select.


SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
RIGHT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- AINDA PODEMOS UTILIZAR SEM A PALAVRA RIGHT
/*
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
*/

-- RESULTADO DA CONSULTA --
FUN_NOME FIL_NOME
JOÃO MATRIZ
JOAQUIM FILIAL 1
JOSÉ FILIAL 1
MÁRCIO FILIAL 2


Note que o funcionário Pedro desta vez não foi incluído na lista de resultados, isto ocorreu porque esta consulta traz apenas registros onde existe um cadastro de Filial para o Funcionário.

 

Inner Join


Temos ainda a situação do Inner Join que nada mais faz do que observar se existem registros combinados em ambas as tabelas, ou seja, para que um registro seja incluído na lista de resultados, o campo de ligação entre duas tabelas deve satisfazer as condições em ambas. O resultado desta consulta seria algo muito semelhante ao Join.

 

Fonte:http://www.prosige.com.br/portal/index.php?option=com_content&view=article&id=58:diferenca-entre-left-right-e-inner-join&catid=1:bancodedados&Itemid=55

Share this post


Link to post
Share on other sites

Obrigado caras pela atenção.

 

Sobre a questão dos tipos de relacionamentos, eu entendo sim como tudo funciona, mas a dúvida sempre foi em relação ao método Load do EntityFramework e/ou como relacionar como left join através do recurso Linq to SQL (que havia comentado que não estava conseguindo fazer funcionar).

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.