FAZER JOIN SEM DESCONSIDERAR RESULTADOS NULL

SQL

Banco de Dados

Oracle PL SQL

29/05/2019

Bom dia, pessoal.

Ainda sou noob em sql e estou precisando muito desse select pra colocar no PowerBI.

Quando faço o select da tabela (quase) inteira no banco, o resultado é de 466 linhas
select * from MAN_ORDEM_SERVICO where nr_seq_wheb is null; 


Quando refino o select, os resultados caem pra 413 linhas. Provavelmente os resultados null estão sendo desconsiderados
select
os.ie_status_ordem,
    os.nr_sequencia,
    pf.nm_pessoa_fisica,    
    plan.ds_grupo_planej,
    os.ie_prioridade,
    local.ds_localizacao,
    equip.ds_equipamento,
    os.dt_ordem_servico,
    os.dt_atualizacao,
    custo.ds_centro_custo, -- (puxar nome)
    os.ds_dano_breve,
    os.dt_fim_real
from 
    man_ordem_servico os, pessoa_fisica pf, man_localizacao local,
    man_equipamento equip, centro_custo custo, man_grupo_planejamento plan
where
    os.cd_pessoa_solicitante = pf.cd_pessoa_fisica              
    and os.nr_seq_localizacao = local.nr_sequencia
    and os.nr_seq_equipamento = equip.nr_sequencia
    and os.cd_centro_custo_os = custo.cd_centro_custo
    and os.nr_grupo_planej = plan.nr_sequencia
    and nr_seq_wheb is null; 


Já tentei colocar entre parenteses (por exemplo)
(os.nr_seq_localizacao = local.nr_sequencia or os.nr_seq_localizacao is null)
mas não funciona...
Dei uma pesquisada no fórum e no google e vi muita gente usando outer join, left join e tal..mas não sei se seria esse o caso e se for, qual seria o ideal.
Por favor, me deem essa força!! :D
Obrigado!
Igor Alvim

Igor Alvim

Curtidas 0

Melhor post

Renato Dias

Renato Dias

30/05/2019

Fala Igor. Você está tentando um relacionamento entre as tabelas através de "WHERE". Mas a forma correta de relacionar tabelas é com JOIN. Neste link você pode conferir a documentação da Oracle sobre SELECT utilizando JOIN, com exemplos: https://www.oracle.com/technetwork/pt/articles/sql/tipos-de-joins-padroes-sql-2501277-ptb.html
GOSTEI 1

Mais Respostas

Igor Alvim

Igor Alvim

29/05/2019

Fala Igor. Você está tentando um relacionamento entre as tabelas através de "WHERE". Mas a forma correta de relacionar tabelas é com JOIN. Neste link você pode conferir a documentação da Oracle sobre SELECT utilizando JOIN, com exemplos: https://www.oracle.com/technetwork/pt/articles/sql/tipos-de-joins-padroes-sql-2501277-ptb.html


Obrigado Renato!
Fazia tempo que não mexia com SQL, aí na minha empresa inventaram de colocar BI e eu peguei essa bucha.

Muito obrigado!
Vou voltar a estudar a documentação pra pegar direitinho o jeito.
Abraço!
GOSTEI 0
Kleber Santos

Kleber Santos

29/05/2019

Na linha 18 eu presumi que pode ter OS sem equipamento.

Select
    os.ie_status_ordem,
    os.nr_sequencia,
    pf.nm_pessoa_fisica,    
    plan.ds_grupo_planej,
    os.ie_prioridade,
    local.ds_localizacao,
    equip.ds_equipamento,
    os.dt_ordem_servico,
    os.dt_atualizacao,
    custo.ds_centro_custo, -- (puxar nome)
    os.ds_dano_breve,
    os.dt_fim_real
from
    man_ordem_servico os
     inner join pessoa_fisica pf on (os.cd_pessoa_solicitante = pf.cd_pessoa_fisica)
     inner join man_localizacao local on (os.nr_seq_localizacao = local.nr_sequencia)
    left outer join man_equipamento equip on (os.nr_seq_equipamento = equip.nr_sequencia)
    inner join centro_custo custo on (os.cd_centro_custo_os = custo.cd_centro_custo)
    inner join man_grupo_planejamento plan on (os.nr_grupo_planej = plan.nr_sequencia)
where
 nr_seq_wheb is null; 
GOSTEI 1
POSTAR