sql com varias tabelas
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
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
Curtidas 0
Melhor post
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:
o SELECT correto seria:
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
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
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
LEFT OUTER JOIN tabela2 b ON a.numero = b.numero
LEFT OUTER JOIN tabela3 c ON b.numite = c.numite
GOSTEI 0
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
17/09/2014
Outro detalhe:
Não é considerada uma boa prática de programação utilizar
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.
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