sql com varias tabelas

Delphi

17/09/2014

ola

preciso fazer um select em 3 tabelas, estou tentando o seguinte:

select a.*, b.*, c.* from tabela1 a, tabela2 b, tabela3 c
where a.numero = b.numero and b.numite = c.numite

tabela1, mestre
tabela2, itens
tabela3, medidas

porem quando nao existir registros na tabela3, nao traz nenhum registro, tem como fazer essa consulta funcionar mesmo quando nao houver registros na tabela3 ?

Obrigado
Felipe Ip

Felipe Ip

Curtidas 0

Melhor post

Marisiana Battistella

Marisiana Battistella

18/09/2014

Um detalhe que vc deve tomar cuidado é que utilizando o LEFT em todos os JOINS vc está permitindo que retorne todos os dados que tenham ou não tenham valores nas 3 tabelas e isso pode vir a interferir no resultado...
Como vc questionou:
porem quando nao existir registros na tabela3, nao traz nenhum registro, tem como fazer essa consulta funcionar mesmo quando nao houver registros na tabela3 ?

o SELECT correto seria:
select a.*,
                    b.*,
                    c.*
         from tabela1 a 
         JOIN tabela2 b
         ON a.numero = b.numero 
         LEFT JOIN tabela3 c
         ON b.numite = c.numite
         where a.data between '01.01.2014' and '31.01.2014'
         and a.tipo = 'SAIDA' 
GOSTEI 1

Mais Respostas

Wander Santos

Wander Santos

17/09/2014

Pesquisa LEFT JOIN e ou RIGHT JOIN. E facil de usar. Ele retornara registro mesmo nao tendo dados na tabela na esquerda ou da direita. Qualquer duvida e so falar
GOSTEI 0
Wanderson Cortes

Wanderson Cortes

17/09/2014

Isso mesmo, eu usaria o LEFT OUTER JOIN assim:


select a.*, b.*, c.* from tabela1 a
LEFT OUTER JOIN tabela2 b ON a.numero = b.numero
LEFT OUTER JOIN tabela3 c ON b.numite = c.numite
GOSTEI 0
Felipe Ip

Felipe Ip

17/09/2014


select a.*, b.*, c.* from tabela1 a
LEFT OUTER JOIN tabela2 b ON a.numero = b.numero
LEFT OUTER JOIN tabela3 c ON b.numite = c.numite
where a.data between '01.01.2014' and '31.01.2014' and a.tipo = 'SAIDA'


terminei meus filtros e ficou perfeito, muito obrigado
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

17/09/2014

Outro detalhe:
Não é considerada uma boa prática de programação utilizar
select c.* from nome_tabela c

Sempre indique os nomes das colunas que contém as informações que vc precisa obter no retorno. Você não precisa buscar todos os dados se vc só precisa da informação armazenada em X e Y.
Isso reduz o custo dos SQL e evita que o banco de dados realize um processamento maior e desnecessário.
GOSTEI 1
POSTAR