none
duvida em campo nulos RRS feed

  • Pergunta

  • Prezados bom dia, vejam se e possivel,

    tenho uma Sql simples que faz relacionamento entre duas tabelas FTB4 classificacao e FLAN lançamentos, NA FTB4 tenho varias contas umas 300 e algumas tem lancamentos na FLAN, outras nao, o que eu gostaria de no Select trouxesse todas as Contas, inclusive as que nao tiveram lançamentos. veja a SQL


    SELECT
      FTB1.CODTB1FLX,
      FTB1.DESCRICAO
      FROM FTB1,FLAN
    WHERE
    FLAN.CODCOLIGADA = FTB1.CODCOLIGADA
    AND FLAN.CODTB1FLX = FTB1.CODTB1FLX
    AND FLAN.CODCOLIGADA= '1'  
    AND FLAN.STATUSLAN = '1'
    GROUP BY FLAN.CODTB1FLX,FTB1.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY 1

    Ja tentei Left Join, entre varias coisas e nada, qualquer ajuda e bem vinda.

    Obrigado a todos

    terça-feira, 9 de agosto de 2011 14:31

Respostas

  • Boa Tarde,

    Via WHERE não irá funcionar. O LEFT JOIN pode fazer, mas é necessário montar os predicados corretamente.

    SELECT
     FTB1.CODTB1FLX,
     FTB1.DESCRICAO
    FROM FTB1
    LEFT OUTER JOIN FLAN ON
     FTB1.CODCOLIGADA = FLAN.CODCOLIGADA
      AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
     AND FLAN.CODCOLIGADA= '1'  
     AND FLAN.STATUSLAN = '1'
    GROUP BY FTB1.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY FTB1.CODTB1FLX

    Sugiro abandonar construções que juntem colunas na cláusula WHERE. Só poluem o código e limitam suas possibilidades.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 9 de agosto de 2011 17:18
    • Marcado como Resposta Ronnie Von quarta-feira, 10 de agosto de 2011 10:28
    terça-feira, 9 de agosto de 2011 16:58

Todas as Respostas

  • Bom dia Ronie,

    Você tentou usar o RIGHT JOIN? Ex: FROM FTB1 RIGHT JOIN FLAN ON...

    Ou até mesmo o FULL JOIN?

    Espero ter ajudado, se for o caso, marque como útil e como resposta.

    Até mais.


    Rafael Godoi Sabadin
    http://www.linkedin.com/pub/rafael-godoi-sabadin/30/b20/a0b
    Classifique as respostas. O seu feedback é essencial.
    terça-feira, 9 de agosto de 2011 14:40
  • Rafael tentei e mesmo assim nao troxe as informaçoes,,

    Obrigado

    terça-feira, 9 de agosto de 2011 16:48
  • Boa Tarde,

    Via WHERE não irá funcionar. O LEFT JOIN pode fazer, mas é necessário montar os predicados corretamente.

    SELECT
     FTB1.CODTB1FLX,
     FTB1.DESCRICAO
    FROM FTB1
    LEFT OUTER JOIN FLAN ON
     FTB1.CODCOLIGADA = FLAN.CODCOLIGADA
      AND FTB1.CODTB1FLX = FLAN.CODTB1FLX
     AND FLAN.CODCOLIGADA= '1'  
     AND FLAN.STATUSLAN = '1'
    GROUP BY FTB1.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY FTB1.CODTB1FLX

    Sugiro abandonar construções que juntem colunas na cláusula WHERE. Só poluem o código e limitam suas possibilidades.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 9 de agosto de 2011 17:18
    • Marcado como Resposta Ronnie Von quarta-feira, 10 de agosto de 2011 10:28
    terça-feira, 9 de agosto de 2011 16:58
  • Ronnie,

    Não vai funcionar por causa da sua condição WHERE. Como vc filtra por FLAN.CODCOLIGADA= '1' e FLAN.STATUSLAN = '1' realmente não vai trazer o que vc quer. Uma vez que na FLAN não vai existir, ao colocar esta regra os nulos serão descartados.

     

    Talvez possa ajudar assim:

    SELECT
      FTB1.CODTB1FLX,
      FTB1.DESCRICAO
      FROM FTB1 LEFT OUTER JOIN FLAN ON (FLAN.CODCOLIGADA = FTB1.CODCOLIGADA AND FLAN.CODTB1FLX = FTB1.CODTB1FLX and FLAN.CODCOLIGADA= '1'  AND FLAN.STATUSLAN = '1' )
    WHERE flan.CODCOLIGADA is null or flan.CODTB1FLX is null
    GROUP BY FLAN.CODTB1FLX,FTB1.CODTB1FLX,FTB1.DESCRICAO
    ORDER BY 1


    Marco Antônio Pinheiro / MCTS - MCC http://marcoantoniopinheiro.blogspot.com
    terça-feira, 9 de agosto de 2011 17:06