Uma Unica Query em multiplas tabelas

5 respostas
L

Boas pessoal !

Estou com algumas dificuldades em construir uma query que retira informação de tres (3) tabelas.

O senario é o seguinte:

eu ja consigo retirar informação de duas tabelas atraves da opção inner join da seguinte forma :

select campo1, campo2, campo3, campo4, campo5,  t2campo6 from  tab1 inner join tab2 on (tab1.campo1 = tab2.t2campo6) where campo1 = ? and campo2 = ? and campo3 = ? and campo4 = ?  ";

O meu problema é o seguinte: Posso acrescentar mais uma opção que me permita retirar informação de outra tabela “tab3” nesta mesma query ?

E essa informação que quero retirar desta outra tabela tem uma relação de 3 campos chaves com a tab1 mas nao tem nada em comun com a tab2

ou seja, os dados que quero retirar da tab3 sao os que tem como chaves os campos : campo1, campo2, campo3 e campo4, da tabela tab1.

e os dados que quero retirar da tab2 sao os que tem como chaves os campos : campo1 da tabela tab1

como posso construir uma query para satisfazer esta necessidade ?

Obrigado desde ja !

5 Respostas

J

Olá Luiz Claudio

utilizando sua query de exemplo vou adicionar a instrução SQL:

[color=“green”]select campo1, campo2, campo3, campo4,
campo5, t2campo6, t3campo7, t3campo8
from tab1
inner join tab2
on (tab1.campo1 = tab2.t2campo6)
inner join tab3
on tab1.campo1 = tab3.t3campo1
and tab1.campo2 = tab3.t3campo2
and tab1.campo3 = tab3.t3campo3
and tab1.campo4 = tab3.t3campo4

where campo1 = ?
and campo2 = ?
and campo3 = ?
and campo4 = ? "; [/color]

exemplo:

select campo1, campo2, campo3, campo4, 
       campo5,  t2campo6, t3campo7, t3campo8
 from  tab1 
 inner join tab2 
    on (tab1.campo1 = tab2.t2campo6) 
 inner join tab3
    on tab1.campo1 = tab3.t3campo1
   and tab1.campo2 = tab3.t3campo2
   and tab1.campo3 = tab3.t3campo3
   and tab1.campo4 = tab3.t3campo4
 where campo1 = ? 
   and campo2 = ? 
   and campo3 = ? 
   and campo4 = ?  ";

Isso fará o relacionamento com a 3ª tabela e assim sucessivamente com quantas vc quiser.

QQ Dúvita poste aí

SDS,

Jardel

_
select tabela1.campo1, tabela1.campo2, tabela2.campo1, tabela2.campo2, tabela3.campo3, tabela3.campo3 from tabela1 join tabela2 on (tabela1.campo1=tabela2.campo1) join tabela3 on (tabela3.campo1 = tabela2.campo1) where ...

Não sei se entendi bem sua pergunta, mas é só você ir acrescentando joins e colocando os critérios deles nos “ON”…

_
select tabela1.campo1, tabela1.campo2, tabela2.campo1, tabela2.campo2, tabela3.campo3, tabela3.campo3 from tabela1 join tabela2 on (tabela1.campo1=tabela2.campo1) join tabela3 on (tabela3.campo1 = tabela2.campo1) where ...

Não sei se entendi bem sua pergunta, mas é só você ir acrescentando joins e colocando os critérios deles nos “ON”…

J

Olá Luiz Claudio

utilizando sua query de exemplo vou adicionar a instrução SQL:

[color=“green”]select campo1, campo2, campo3, campo4,
campo5, t2campo6, t3campo7, t3campo8
from tab1
inner join tab2
on (tab1.campo1 = tab2.t2campo6)
inner join tab3
on tab1.campo1 = tab3.t3campo1
and tab1.campo2 = tab3.t3campo2
and tab1.campo3 = tab3.t3campo3
and tab1.campo4 = tab3.t3campo4

where campo1 = ?
and campo2 = ?
and campo3 = ?
and campo4 = ? "; [/color]

exemplo:

select campo1, campo2, campo3, campo4, 
       campo5,  t2campo6, t3campo7, t3campo8
 from  tab1 
 inner join tab2 
    on (tab1.campo1 = tab2.t2campo6) 
 inner join tab3
    on tab1.campo1 = tab3.t3campo1
   and tab1.campo2 = tab3.t3campo2
   and tab1.campo3 = tab3.t3campo3
   and tab1.campo4 = tab3.t3campo4
 where campo1 = ? 
   and campo2 = ? 
   and campo3 = ? 
   and campo4 = ?  ";

Isso fará o relacionamento com a 3ª tabela e assim sucessivamente com quantas vc quiser.

QQ Dúvita poste aí

SDS,

Jardel

L

BOas pessoal !

Tentei assim como voces falaram, mas o que acontece é que os valores nao estao vindo correctamente quando eu acrescento o 3º inner join!

mas quando retiro o 3º inner join os dados vem bem, mas claro sem os dados da 3ª tabela que afinal é o meu objectivo !

Na investigação que fiz constactei que os dados nao vem certos porque ele apenas esta trazendo os dados que tenham informação da 3º tabela.

Caso a 3º tabela nao tenha uma informação ele nao traz os dados das outras tabelas. tem como eu trazer tudo ? ou seja independente de ter ou nao na 3ª tabela eu quero que os meus dados venham todos das outras tabelas !

O que eu acho é que ele ta condicionando os dados das outras tabelas com o da 3ª tabela, pois verifico que quando tiro o inner join da 3ª tabela ele tras tudo, mas se acrescento ele so me devolve os dados na tabela 1 e 2 que tenha um dado correspondente a tabela 3.

Alguem me pode ajudar em como resolver isso ?

Obrigado dede ja !

Criado 19 de janeiro de 2007
Ultima resposta 23 de jan. de 2007
Respostas 5
Participantes 3