JOIN COM MAIS DE 3 TABELAS EM BANCO ACCESS

ALEXRONCHI 26/12/2013 15:00:33
#432466
Olá amigos, eu estava com um problema para usar o JOIN com mais de DUAS tabelas, dei uma caçada no bom e velho google e achei pra fazer com 3 tabelas, o código está abaixo:

Select PE*, EN.*, TE.*
From [txt-color=#e80000]([/txt-color]Pessoa PE
Left Join Endereco EN On EN.pessoa_end = PE.id_pes[txt-color=#e80000]) [/txt-color]
Left Join Telefone TE On TE.pessoa_tel = PE.id_pes

Tendo este código, alguém saberia me dizer como eu faria pra relacionar mais tabelas, como por exemplo Email e Documentos?

Não entendi muito bem a lógica usada pra fazer esta query, se alguém pude ajudar, ficarei grato!

Obrigado
KERPLUNK 26/12/2013 15:49:53
#432467
Resposta escolhida
Para [Ô]Left Join[Ô], você pode fazer implicitamente:

Select pe.*, en.*, te.*
from pessoa pe, endereco en, telefone te, tabelaX tx
where en.pessoa_end = pe.id_pes
and te.pessoa_tel = pe.id_pes
and tx.pessoa_cod = pe.id_pes
GUIMORAES 26/12/2013 16:32:42
#432468
Tenho 3 tabelas, Clientes, Cli_Enderecos e Cli_Adicionais.
Tenho uma chave primária na tabela Clientes, que se chama Código e uma chave estrangeira na tabela Cli_Enderecos que também se chama Código e na tabela Cli_Adicionais tenho a Chave estrangeira que se chama Código.

Tabela Clientes.
|Codigo| Nome |
000001| JOSé DA SILVA |
000002| JOANA DARK |

Tabela Cli_enderecos

|Codigo| Endereco |
000001| RUA TAL |
000002| RUA UM |

Tabela Cli_Adicionais

|Codigo| Apelido |
000001| Zé |
000002| JÔ |


Percebemos que em cada tabela há uma referencia, que é o código, com ela podemos fazer o select que você postou.

Select clientes.codigo, clientes.nome, cli_enderecos.endereco, cli_adicionais.apelido
From clientes
Left join cli_enderecos on cli_enderecos.codigo = clientes.codigo
Left join cli_adicionais on cli_adicionais.codigo = clientes.codigo

Retorno

|Codigo | Nome | Endereco | Apelido
000001| JOSé DA SILVA | RUA TAL | Zé
000002| JOANA DARK | RUA UM | JÔ


Podemos subistituir o Left join por inner join, mas a uma diferença entre elas, o left join traz todos os registros da tabela, mesmo os registros que não possuem referencia, mas o inner join só traz os registros com referencia em todas as tabelas apontadas no select.

Poderíamos fazer de outra forma, como abaixo:

Select clientes.codigo, clientes.nome, cli_enderecos.endereco, cli_adicionais.apelido
From clientes, cli_enderecos, cli_adicionais
where clientes.codigo = cli_enderecos.codigo and
clientes.codigo = cli_adicionais.codigo


Acho que o primeiro exemplo fica mais controlado, mais isto vai da aplicação.
Tópico encerrado , respostas não são mais permitidas