Fórum sql com varias tabelas #492559

17/09/2014

0

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

Responder

Post mais votado

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' 

Marisiana Battistella

Marisiana Battistella
Responder

Gostei + 1

Mais Posts

18/09/2014

Wander Santos

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
Responder

Gostei + 0

18/09/2014

Wanderson Cortes

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
Responder

Gostei + 0

18/09/2014

Felipe Ip


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
Responder

Gostei + 0

18/09/2014

Marisiana Battistella

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.
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar