Usuário com melhor resposta
Comparar CNPJs em duas tabelas diferentes

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.
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
-
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
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
-
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
WHERET1.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
-
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 NULLOnde DOC e DOCUMENTO são as colunas que contém os números dos CNPJs.
-
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.
-
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
-
-
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