inner join 3 tabelas com 1 vazia.

09/10/2019

5

SQL

olá galera,
estou efetuando uma consulta para trazer os dados de 3 tabelas em um registro, até ai tudo bem traz corretamente quando tem registro nas 3, quando uma não tem registro não traz da outras duas.
exemplo. tabela1 Saida
tabela2 Saida_Itens
tabela3 Saida_Serviço
se tem registro na tabela2 e na tabela3 traz normal ,
se não tem na tabela3 ele não apresenta os dados da tabela1 e tabela2 .

sql que estou usando.

select s.cdSaida, s.data, s.cdcliente, s.cliente_nome,
si.cdproduto, si.descricao, si.qte, si.valor Valor_Produto, si.prod_vdesc Desc_Produto, si.total Total_Produto,
ss.servico, ss.valor Valor_Servico, ss.total Total_Servico
from saida s
inner join saidaitens si on (s.cdsaida=si.cdsaida)
inner join saidaservico ss on (s.cdsaida=ss.cdsaida)
where s.placa = ''SEMPLACA''
Responder

Post mais votado

10/10/2019

pra obter o resultado desejado, você não pode usar INNER. esta cláusula diz que só deve aparecer se o registro existir na tabela.
para o seu caso é indicado o uso de LEFT.
select
   s.cdSaida, s.data, s.cdcliente, s.cliente_nome,
   si.cdproduto, si.descricao, si.qte, si.valor Valor_Produto, si.prod_vdesc Desc_Produto, si.total Total_Produto,
   ss.servico, ss.valor Valor_Servico, ss.total Total_Servico
from
   saida s
left join
   saidaitens si on (s.cdsaida=si.cdsaida)
left join
   saidaservico ss on (s.cdsaida=ss.cdsaida)
where
   s.placa = ''SEMPLACA''
você pode utilizar a função COALESCE() pra melhorar a apresentação do resultado, afim de evitar que sejam apresentados conteúdos NULL.
Responder

Mais Posts

10/10/2019

Marcio

Obrigado, Emerson Nascimento,
testei aqui e ficou top.

obrigado pela ajuda.

Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira