none
DUVIDAS SELECT COM LEFT OUT JOIN RRS feed

  • Pergunta

  • Ola,

    tenho a seguinte instrução:

    SELECT     
    d.EXER AS Exercicio, ac.CodProjeto, d.EVENTO, d.[DOCUMENT-NE] AS NumEmpenho, esf.Data_NE AS DataDocumento, RIGHT('0' + CAST(d.[UG-IDE] AS VARCHAR(10)), 6) AS UG, esf.Programa AS CodPrograma, 
            esf.Acao AS CodAco, pro.NomPrograma AS Programa, ac.NomAcao AS Acao, esf.Funcao AS CodFuncao, esf.SubFuncao AS CodSubFuncao, esf.CodEspecificacaoDespesa, 
            d.[CONTA CORRENTE] AS documento, esf.CO_FAVORECIDO AS DocCredor
          
    FROM            
    TABELA_D AS d 
    LEFT OUTER JOIN TABELA_ESF AS esf 
    ON d.EXER = CAST (YEAR (esf.Data_NE) as smallint)
    AND d.[UN.RZ.] = esf.UN_GES 
    AND (d.[CONTA CORRENTE] = esf.DOC_ORIG_NE 
    OR d.[DOCUMENT-NE] = esf.DOCUMENT_NE) 
    LEFT OUTER JOIN TABELA_pro AS pro
    ON d.EXER = pro.Exercicio 
    AND esf.Programa = pro.CodPrograma 
    LEFT OUTER JOIN TABELA_ac AS ac 
    ON esf.Acao = ac.CodAcao 
    AND d.EXER = ac.Exercicio 

    WHERE  (d.EXER = CAST (2019 as smallint))


    Nesta consulta o campo CodProjeto da tabela AC, esta vindo null, embora quando faço um join nas tabelas ac e esf
    existem dados para este campo,
    minha duvida é: sem no left outer join entre as tabelas ac e esf influencia contra a tabela_D?


    Maricelmo




    • Editado Maricelmo terça-feira, 14 de abril de 2020 14:24
    terça-feira, 14 de abril de 2020 14:23

Todas as Respostas

  • Boa tarde,

    Não consegui entender muito bem a sua questão, mas acho que com o uso do Left Join existem basicamente 2 possibilidades no caso da coluna ter retornado null:

    a) não foi possível fazer a junção com nenhuma linha da tabela utilizando os valores das colunas especificadas no Join

    b) foi possível fazer a junção com uma linha mas o valor da coluna era null

    Se for utilizado um Inner Join no lugar do Left Join, quando ocorrer a situação do item a a linha em questão deixa de ser retornada na consulta, e quando ocorrer a situação do item b o resultado continuaria o mesmo.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 14 de abril de 2020 19:43
  • Ola.
    Gapimex. Obrigado por sua ajuda.

    seguinte quando eu executo o script abaixo o CAMPO AC.CODPROJETO vem com os dados, quando incluo a TABELA_D AS d, os dados vem null:

    SELECT
            ac.CodProjeto,  esf.Data_NE AS DataDocumento, esf.Programa AS CodPrograma, 
            esf.Acao AS CodAco, pro.NomPrograma AS Programa, ac.NomAcao AS Acao, esf.Funcao AS CodFuncao,              esf.SubFuncao AS CodSubFuncao, esf.CodEspecificacaoDespesa, esf.CO_FAVORECIDO AS DocCredor   
    FROM            
          TABELA_ESF AS esf 
          LEFT OUTER JOIN TABELA_pro AS pro
         ON esf.Programa = pro.CodPrograma 
         LEFT OUTER JOIN TABELA_ac AS ac 
        ON esf.Acao = ac.CodAcao 
    WHERE  (d.EXER = CAST (2019 as smallint))


    Maricelmo

    quarta-feira, 15 de abril de 2020 13:35
  • Na consulta do início do tópico são utilizadas 2 colunas para fazer a junção das tabelas:

    LEFT OUTER JOIN TABELA_ac AS ac 
        ON 
            esf.Acao = ac.CodAcao AND 
            d.EXER = ac.Exercicio 
    

    E nessa segunda consulta só é utilizada uma coluna para fazer a junção:

    LEFT OUTER JOIN TABELA_ac AS ac 
        ON 
            esf.Acao = ac.CodAcao 

    Acho provável que a junção não foi possível na primeira consulta por causa dessa condição a mais.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 15 de abril de 2020 15:03