none
Comparar CNPJs em duas tabelas diferentes RRS feed

  • Pergunta

  • Olá.

    Eu tenho duas tabelas com CNPJs. Alguns CNPJs estão em ambas as tabelas, alguns estão somente em uma delas. Gostaria de saber qual comando eu poderia usar para mostrar todos os CNPJs da tabela 1 que não constem na tabela 2, e depois pra mostrar todos os CNPJs da tabela 2 que não constem na tabela 2. Tentei Left Join, Inner Join, Full Join, mas não obtive sucesso.

    Gostaria que alguém pudesse me ajudar.

    quinta-feira, 11 de fevereiro de 2016 13:19

Respostas

  • Agora pelo que estou entendendo você quer retornar os dados únicos em cada tabela, certo?

    Então teste com uma UNION pra ver se serve. A query não é a mais indicada, mas acredito que sirva

    Existem outras maneiras, mas veja se assim soluciona seu problema. Serão retornadas duas colunas onde uma delas será nula e a outra com a informação existente apenas em uma tabela.

    Espero que seja isto que precisa, então é só lapidá-la a sua necessidade.

    SELECT CNPJS_BASE1.DOCUMENTO CNPJ1, NULL CNPJ2
    FROM CNPJS_BASE1
    WHERE 
    DOCUMENTO NOT IN (SELECT DOC FROM CNPJS_BASE2)

    UNION 

    SELECT NULL CNPJ1, CNPJS_BASE.DOC CNPJ2
    FROM CNPJS_BASE2
    WHERE 
    DOC  NOT IN (SELECT DOCUMENTO FROM CNPJS_BASE1)

    • Marcado como Resposta Paulo Felício quinta-feira, 11 de fevereiro de 2016 17:52
    quinta-feira, 11 de fevereiro de 2016 17:18
  • Paulo, sei que você já conseguiu obter o resultado esperado, mas segue mais uma sugestão para teste:

    SELECT CNPJS_BASE1.DOCUMENTO, CNPJS_BASE2.DOC
    FROM CNPJS_BASE1
    FULL OUTER JOIN CNPJS_BASE2
        ON CNPJS_BASE2.DOC = CNPJS_BASE1.DOCUMENTO
    WHERE
        CNPJS_BASE1.DOCUMENTO IS NULL OR
        CNPJS_BASE2.DOC IS NULL

    Espero que seja útil


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

    • Marcado como Resposta Paulo Felício sexta-feira, 12 de fevereiro de 2016 11:12
    quinta-feira, 11 de fevereiro de 2016 20:07

Todas as Respostas

  • Bom dia,

    Paulo, acredito que você deve conseguir o resultado esperado com o Full Join. Ex:

    select
        t1.Cnpj as Cnpj1,
        t2.Cnpj as Cnpj2
    from Tabela1 as t1
    full join Tabela2 as t2
        on t2.Cnpj = t1.Cnpj

    Se você não conseguir o resultado esperado, talvez seja melhor você postar como está a sua query.

    Espero que ajude


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

    quinta-feira, 11 de fevereiro de 2016 13:25
  • Pela pergunta acredito que queira retornar os dados que existam na tabela 2 e que não existam na tabela 1, certo?

    Se for isto, também acredito que a query possa ser utilizada da seguinte forma:


    SELECT T2.CNPJ

    FROM TABELA1 T1
    FULL OUTER JOIN TABELA2 T2
    ON T2.CNPJ = T1.CNPJ
    WHERE

    T1.CNPJ IS NULL

    AND T2.CNPJ IS NOT NULL

    OU SE PREFERIR, MAS EM ALGUNS CASOS PESA MUITO

    SELECT CNPJ
    FROM TABELA2
    WHERE 
    CNPJ NOT IN (SELECT CNPJ FROM TABELA1)

    ORDER BY CNPJ



    • Editado Marctym quinta-feira, 11 de fevereiro de 2016 14:20
    • Sugerido como Resposta Danilo Telles quinta-feira, 11 de fevereiro de 2016 14:56
    quinta-feira, 11 de fevereiro de 2016 14:06
  • Então, eu fiz essa primeira query com as duas tabelas, ou seja, fiz uma query para pegar os CNPJs exclusivos da Tabela 1 e outra query para pegar os CNPJs exclusivos da tabela 2. Só que quando eu jogo o resultado de ambas as querys no excel, as duas colunas apresentam CNPJs iguais, ou seja, que estão em ambas as tabelas... não sei se fiz algo errado.

    Veja a Query que estou fazendo:

    SELECT CNPJS_BASE2.DOC

    FROM CNPJS_BASE1
    FULL OUTER JOIN CNPJS_BASE2
    ON CNPJS_BASE2.DOC = CNPJS_BASE1.DOCUMENTO
    WHERE

    CNPJS_BASE1.DOCUMENTO IS NULL

    AND CNPJS_BASE2.DOC IS NOT NULL

    Onde DOC e DOCUMENTO são as colunas que contém os números dos CNPJs.

    quinta-feira, 11 de fevereiro de 2016 16:54
  • Então, mas eu precisava de uma query que retornasse duas colunas, uma com os cnpjs só da tabela 1, e outra só com os cnpjs da tabela 2, é aí que está minha dificuldade. Pq se eu fizer esse Join aí ele me retorna uma coluna só com tudo misturado.
    quinta-feira, 11 de fevereiro de 2016 16:59
  • Agora pelo que estou entendendo você quer retornar os dados únicos em cada tabela, certo?

    Então teste com uma UNION pra ver se serve. A query não é a mais indicada, mas acredito que sirva

    Existem outras maneiras, mas veja se assim soluciona seu problema. Serão retornadas duas colunas onde uma delas será nula e a outra com a informação existente apenas em uma tabela.

    Espero que seja isto que precisa, então é só lapidá-la a sua necessidade.

    SELECT CNPJS_BASE1.DOCUMENTO CNPJ1, NULL CNPJ2
    FROM CNPJS_BASE1
    WHERE 
    DOCUMENTO NOT IN (SELECT DOC FROM CNPJS_BASE2)

    UNION 

    SELECT NULL CNPJ1, CNPJS_BASE.DOC CNPJ2
    FROM CNPJS_BASE2
    WHERE 
    DOC  NOT IN (SELECT DOCUMENTO FROM CNPJS_BASE1)

    • Marcado como Resposta Paulo Felício quinta-feira, 11 de fevereiro de 2016 17:52
    quinta-feira, 11 de fevereiro de 2016 17:18
  • Valeu, cara, acho que isso resolve meu problema!

    Obrigado a todos que responderam.

    quinta-feira, 11 de fevereiro de 2016 17:42
  • Paulo, sei que você já conseguiu obter o resultado esperado, mas segue mais uma sugestão para teste:

    SELECT CNPJS_BASE1.DOCUMENTO, CNPJS_BASE2.DOC
    FROM CNPJS_BASE1
    FULL OUTER JOIN CNPJS_BASE2
        ON CNPJS_BASE2.DOC = CNPJS_BASE1.DOCUMENTO
    WHERE
        CNPJS_BASE1.DOCUMENTO IS NULL OR
        CNPJS_BASE2.DOC IS NULL

    Espero que seja útil


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

    • Marcado como Resposta Paulo Felício sexta-feira, 12 de fevereiro de 2016 11:12
    quinta-feira, 11 de fevereiro de 2016 20:07