none
Comparação entre Tabelas para inserção de registro inexistente

    Question

  • Ola pessoal!

     

    Gustavo havia me ajudado numa questao de comparação de tabelas para inserção de registros inexistentes. Coloquei o topico abaixo.

     

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=4203648&SiteID=21

     

     

    Eu tentei adaptar pra minha realidade mas estou me enrolando...e queria ver se alguem poderia me dar um help.

     

    A minha realidade é a seguinte:

     

    Temos 4 tabelas

     

    select * from cidades ( em media 200 registros )

    cidade              UF   CNL    REGIONAL

    --------------------    ----   ------   -------------------

    ANANINDEUA  PA   AIU   CONO
    ANAPOLIS       GO  ANS  CONO
    .

    .

    .


    select * from aux_servicos ( somente 3 registros )

    SERVICO

    ---------------

    WMX
    ADE
    NET


    select * from aux_relatorio ( somente 3 registros )
    RELATORIO

    ------------------

    LI
    BL
    PC

     

    select * from aux_status  ( somente 3 registros )
    STATUS

    -------------

    ATV
    DES
    PEN
    SRV

    Uma vez por mes é feito a população da tabela RELATORIO_RDBC_FULL da seguinte forma.

     

    INSERT INTO RELATORIO_RDBC_FULL

    (   cidade   ,
        uf       ,
        cnl      ,
        regional ,
        servico  ,
        status   ,
        relatorio    
     )

    SELECT CIDADE,UF,CNL,REGIONAL,SERVICO,STATUS,RELATORIO

    FROM CIDADES

    CROSS JOIN AUX_STATUS

    CROSS JOIN AUX_SERVICOS

    CROSS JOIN AUX_RELATORIO

    ORDER BY CIDADE, UF,CNL,SERVICO,STATUS,RELATORIO

     

    Nisso temos 36 registros de uma mesma cidade. O cross joins faz cada cidade ser combinada com o conteudo das tabelas  "aux_servico" ( 3 ) , "aux_status" ( 3 ) , "aux_relatorio" ( 4 )

    3 x 3 x 4 = 36

     

    Ate ae tudo bem. O problema é que surgiu a necessidade de verificarmos a existencia de uma nova "cidade/cnl" todos os dias.

    Nós receberemos um txt com todas as cidades/cnls possiveis. Nisso teremos que verificar se existe alguma cidade/CNL novo e caso exista , esta deve ser inserida na tabela RELATORIO_RDBC_FULL ( com o detalhe que ela precisa ser inserida combinada com o conteudo das tabelas "aux_servico" ( 3 ) , "aux_status" ( 3 ) , "aux_relatorio" ( 4 ) . )

     

    Alguem pode me ajudar?

     

    Desde ja o meu obrigado pela atenção.

    Wednesday, January 14, 2009 1:11 PM

All replies

  • Bom Dia,

     

    Acredito que a seqüência de passos abaixo possa ajudá-lo

     

    - Carregue o TXT para um tabela nova (ex: Cidades_Novas)

    - Insira em RELATORIO_RDBC_FULL apenas as cidades que não existem conforme o exemplo abaixo:

     

    Code Snippet

    INSERT INTO RELATORIO_RDBC_FULL

    ( cidade ,

    uf ,

    cnl ,

    regional ,

    servico ,

    status ,

    relatorio

    )

    SELECT CIDADE,UF,CNL,REGIONAL,SERVICO,STATUS,RELATORIO

    FROM CIDADES_NOVAS AS CN

    CROSS JOIN AUX_STATUS

    CROSS JOIN AUX_SERVICOS

    CROSS JOIN AUX_RELATORIO

    WHERE NOT EXISTS

    (SELECT * FROM RELATORIO_RBDC_FULL AS RRF ON CN.cnl = RRF.cnl)

    ORDER BY CIDADE, UF,CNL,SERVICO,STATUS,RELATORIO

     

     

    Seria isso ?

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

     

    Wednesday, January 14, 2009 1:26 PM
    Moderator
  • Fala grande Gustavo!

     

    Impressionante sua velocidade.

    Estou terminando umas atividades aqui e quando acabar eu ja testo sua solução.

     

    Mas desde ja agradeço muito a ajuda!

    Sucesso pra ti!

     

     

    abs

     

    Wednesday, January 14, 2009 2:24 PM
  • Esquerdo,

     

    O segredo para esta comparação esta na utilização do operador Not Exitsts, utilizado para realizar uma análise comparativo entre condições, retornando informação que não existam em uma das tables utilizadas na  comparação.

    Wednesday, January 14, 2009 3:32 PM
  • Olá Esquerdo,

     

    Após uma madrugada um pouco conturbada não fui trabalhar hoje de manhã. Aí ficou fácil para participar mais intensivamente do fórum (pena que foi só de manhã).

     

    Bem, espero que funcione. Aguardamos o retorno.

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

     

    Wednesday, January 14, 2009 4:01 PM
    Moderator