Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Consulta CPF

Eu tenho duas tabelas, a tabela A e tabela B, ambas as tabelas possuem o campo CPF. Eu preciso verificar se na tabela B tem algum CPF que não exista na tabela A OU se retiraram algum CPF da tabela B, então é resumo preciso ver se houve alguma alteração de CPF (Acrescimento ou Exclusão) comparado a tabela A, eu consigo fazer tudo isso em apenas uma querry?

6 respostas

Aline, boa noite.

É possível fazer sim, utilizando o comando FULL JOIN. Ele retorna todos os registros das duas tabelas e onde não encontrar o par ele identifica como NULL.

Ficaria mais ou menos conforme o exemplo abaixo:

SELECT A.CPF AS CPF_A, B.CPF AS CPF_B
FROM TABELA_A A
FULL JOIN TABELA_B B ON A.CPF = B.CPF
;

Tenta aplicar aí e depois nos avise se deu certo.

Abaixo um link onde o Instrutor Victorino Vila aqui da Alura mesmo explica e mostra exemplos com mais detalhes sobre todos os JOINS. Recomendo ver o vídeo completo, a parte do FULL JOIN começa em 5:02 minutos.

Alura - Junções

Bons estudos!

Consegui criar essa query e funcionou, mas agora estou enfrentando um problema, como alguns CPF's começam com o número zero, eles não aparecem no banco de dados. Então se eu faço uma comparação entre 00015265878 e 15265878 eu não tenho o resultado esperado, eu fiz uma busca rápida nos conteúdos da Alura, mas não achei nada sobre isso. É possível fazer um format ou cast dentro do select para a busca do CPF ficar com os 11 dígitos?

Olá Aline. É possível fazer sim. Porém, antes verifica por favor o tipo do campo. Para CPF é recomendado usar o VARCHAR e então ao inserir no campo os valores com zero a esquerda eles não serão ignorados. Evitar INT ou NUMBER.

Usando uma função que, no ORACLE e alguns outros bancos, se chama LPAD. Precisa pesquisar uma equivalência para o Banco de dados que você está usando.

LPAD (coluna_ou_texto, tamanho_final, completar_com)

Essa função recebe três parâmetros.

Parâmetro 1: Texto ou coluna que será formatado;

Parâmetro 2: Tamanho final que o texto terá;

Parâmetro 3: Caractere que irá completar a esquerda do texto;

Aplicando nesse caso ficaria assim:

SELECT LPAD(CPF, 11, '0') AS LPAD, CPF FROM TABELA_A;

Depois de alterar o tipo da coluna para VARCHAR, se quiser corrigir todos os CPFs adicionando o zero a esquerda, é só rodar o seguinte comando:

UPDATE TABELA_A SET CPF = LPAD(CPF, 11, '0');

Espero ter ajudado!

Bons estudos!

Como estudou usando o SQL Server, criei essa string

(SELECT RIGHT ("000000000" + REPLACE(REPLACE([CPF], '-', ""), ".", ""), 11) AS RENOVADO FROM Tabela)

ela funciona maravilhosamente;

Agora queria juntar esse sql com uma de busca, tipo, RENOVA = '31853663603'

Eu tentei usar:

SELECT RIGHT ("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11) FROM Tabela WHERE CPF = '31853663603'

mas ele me retorna uma tabela vazia. E tentei usar essa subconsulta mas ele não entende o 'A.RENOVADO"

SELECT A.RENOVADO FROM (SELECT RIGHT ("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11) FROM Tabela) A
WHERE A.RENOVADO = 31853663603

Até mesmo essa subconsulta que tentei

SELECT CPF FROM Tabela WHERE (SELECT RIGHT ("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11) FROM Tabela WHERE CPF= '40183974026');

Trouxe uma tabela com todos esses valores: CPF (São campos texto) 47566410830 160.680.410-34 101.082.210-16 40183974026 56511033090 87542948008 19205997030 088.563.790-90 05889047086 98327114018 318.536.636-03 078.862.186-63

Que são todos os registros da minha tabela HAHAHAHA

solução!

A mesma ideia usada no SELECT para tratar o campo CPF precisa ser usada no WHERE também.

Tenta assim:

SELECT
    RIGHT("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11)
FROM Tabela
WHERE
    RIGHT("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11) = '31853663603'
;

Ou assim, aqui talvez faltou apelidar a coluna da subconsulta (AS RENOVADO):

SELECT A.RENOVADO
FROM (
    SELECT
        RIGHT("000000000" + REPLACE(REPLACE([CPF], "-", ""), ".", ""), 11) AS RENOVADO
        FROM Tabela
    ) A
WHERE A.RENOVADO = 31853663603
;

Funcionou!! Muito obrigada pela ajuda Diego, sou imensamente grata.