Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lealves

Sincronização entre tabelas

Recommended Posts

Ola amigos,

Estou fazendo uma rotina de sincronização entre duas tabelas em um banco Access, mais estou com alguns problemas.

Seguinte o q eu quero é extrair os dados entre duas tabelas iguais com estruturas iguais mais elas tem dados diferentes, ou seja, queria comparar cada campo de uma tabela com a outra e se tiver um campo diferente eu mostrava na consulta estes dados.

Caso exista diferença também na quantidade de registros de uma tabela para outra também iria extrair esta diferença

Ou seja, depois desta consulta eu iria atualizar os dados diferentes com a outra tabela ou inserir a diferença de dados que tem uma com a outra.

 

Fiz este select pra este fim:

 

SELECT tbl_diferente.registro, tbl_diferente.nome, tbl_diferente.sexo

FROM tbl_diferente

WHERE (((tbl_diferente.registro) Not In (select registro from tbl_original))) OR (((tbl_diferente.nome) Not In (select nome from tbl_original))) OR (((tbl_diferente.sexo) Not In (select sexo from tbl_original)));

 

Estranho a string sql esta tudo certo mais o problema é que não esta trazendo os dados diferentes quando existe entre as tabelas; Só traz a diferença quando tem mais registros na tabela diferente com a tabela original.

Eu tentei este select num bd de teste com 5 linhas e com diferenças nos campos e na quantidade funcionou normal, mais na minha tabela não esta funcionando =/

As duas tabelas estão com os mesmos nomes de campos, mesmo tipo de dados e tipo texto e mesmo tamanho tb

 

Espero a colaboração de vcs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos tomar como exemplo o seguinte caso:

Tenho uma tabela com todos os registros (tbOriginal).

Tenho outra tabela com alguns registros(tbFaltante).

 

Agora eu quero saber quais registros da tbOriginal não estão na tbFaltante.

 

Select o.codCliente, f.codCliente From tbOriginal o Left Join tbFaltante f On o.codCliente = f.CodCliente Where f.codCliente Is Null

Explicando a query, ela seleciona o codCliente da tabela original e da tabela faltante, o Left Join serve justamente para trazer todos os registros da tabela da esquerda e da tabela da direira, se na tabela da direita não existir traz nulo, por isso a condição Where f.codCliente Is Null, assim só vai trazer os registros que existem na original e não existem na faltante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.