Query em tres tabelas

1 resposta
L

Boas pessoal,

Eis a BD:

tabela1 ( T1Campo1, T1Campo2, T1Campo3, T1Campo4, T1Campo5, T1Campo6, T1Campo7, T1Campo8, T1Campo9  )    // Tem relação com a tabela2 em ( tabela1.T1campo5 = tabela2.T2Campo5 )      

tabela2 ( T2Campo1, T2Campo2, T2Campo3, T2Campo4, T2Campo5  )    // Tem relação com a tabela1 em ( tabela1.T1campo5 = tabela2.T2Campo5 )           

tabela3 ( T3Campo1, T3Campo2, T3Campo3, T3Campo4, T3Campo5  )    // Tem relação com a tabela1 em ( tabela1.T1campo1 = tabela3.T2Campo1 ) and ( tabela1.T1campo2 = tabela3.T2Campo2 ) and ( tabela1.T1campo3 = tabela3.T2Campo3 ) and ( tabela1.T1campo4 = tabela3.T2Campo4 )

Tenho a seguinte query para apanhar os dados das tres tabelas :

select T1Campo1, T1Campo2, T1Campo3, T1Campo4, T1Campo5  from  tabela1 inner join tabela2 on (tabela1.T1campo5 = tabela2.T2Campo5) 
inner join tabela3 on (tabela1.T1campo1 = tabela3.T3Campo1) and (tabela1.T1campo2 = tabela3.T3Campo2) and 
(stabela1.T1campo3 = tabela3.T3Campo3) and (tabela1.T1campo4 = tabela3.T3Campo4) 
where T1Campo6 = ? and T1Campo7 = ? and T1Campo8 = ? and T1Campo9 >= ?

O problema é que nesta query quando não existe nenhum valor na tabela3 o resultSet nao mostra todos os resultados das outras tabelas( Mostra apenas os que têm algum registo na tabela3, e os que nao têm nao mostra), ou seja ou ResultSet so mostra quando existe registo na tabela3.

A questão é que as vezes ha valores para serem mostrados nas tabelas tabela1 e tabela2 que nao têm registo na tabela3.
Desta forma gostaria de saber se ha alguma forma de eu ignorar quando nao houvesse dados na tabela3.

1 Resposta

C

Use um LEFT JOIN com a tabela 3 ao invés de um INNER JOIN.

Criado 23 de janeiro de 2007
Ultima resposta 23 de jan. de 2007
Respostas 1
Participantes 2