2011-09-30 13 views
6

He leído todas las soluciones posibles en línea y obtengo un resultado diferente cada vez.¿Cómo fusiono dos tablas en Access mientras elimino duplicados?

Tengo dos tablas: clientes y clientes. Ambos tienen la misma estructura: apellido, nombre, dirección, ciudad, estado y código postal. Los clientes tienen 108,000 entradas, mientras que los clientes solo tienen 42,000 entradas. Y algunas de esas entradas se duplican entre las dos ya que no tengo 150,000 clientes.

Necesito una lista coherente. El problema al que me estoy enfrentando es que algunos de mis clientes residen en la misma dirección, por lo que no puedo simplemente eliminar direcciones duplicadas, ya que eso eliminará a un cliente legítimo. Y tengo algunos clientes con nombres muy comunes, como Jane Doe, donde hay un par de ellos en diferentes direcciones, por lo que no puedo filtrar los apellidos o nombres duplicados.

estoy usando Microsoft Access 2010.

Simplemente girando valores únicos en YES no está ayudando.

He rastreado los archivos de ayuda de Microsoft, y he obtenido resultados de 2 a 168,000 y casi todo lo demás.

¿Cómo puedo obtener una lista única sin duplicados sin tener que alfabetizarla e ir línea por línea para 150,000 entradas?

+0

La forma en que se establece nuestro negocio, algunos son clientes y clientes, mientras que la mayoría son solo uno o el otro. – Lantiis

Respuesta

8

Una consulta UNION devuelve solo filas distintas. (También hay UNIÓN TODO, pero eso incluiría filas duplicadas, por lo que no lo quiere aquí.)

Pruebe esta consulta. Si no devuelve lo que desea, explique por qué si se queda corto.

SELECT LastName, FirstName, Address, City, State, Zip 
FROM Clients 
UNION 
SELECT LastName, FirstName, Address, City, State, Zip 
FROM Patrons 
ORDER BY LastName, FirstName; 

Probablemente desee otro campo o campos en el ORDER BY. Acabo de ofrecer algo para empezar.

+0

Esto realmente me dio el mismo número que obtuve utilizando una consulta en consulta que hice. ¡Así que estoy muy feliz! Tengo dos métodos diferentes que producen el mismo resultado ahora. ¡Muchas gracias! – Lantiis

2

Una forma de hacer esto es hacer un FULL OUTER JOIN y COALESCE los valores. Esto le permitiría saber si está en la tabla de cliente, en la tabla de patrones o en ambos

Desafortunadamente, AFAIK Access no tiene FULL OUTER, por lo que tendrá que simularlo.

SELECT a.LastName, a.FirstName, a.Address, a.City, a.State, a.Zip , "Both" as type 
FROM Clients a INNER JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
UNION ALL 
SELECT a.LastName, a.FirstName, a.Address, a.City, a.State, a.Zip , "Client" as type 
FROM Clients a LEFT JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
WHERE 
    b.PatronID is null (Or whatever the PK is) 
UNION ALL 
SELECT b.LastName, b.FirstName, b.Address, b.City, b.State, b.Zip , "Patron" as type 
FROM Clients a RIGHT JOIN Patrons b 
ON a.LastName = b.LastName 
    AND a.Address = b.Address 
    AND a.City = b.City 
    AND a.State = b.State 
    AND a.Zip = b.Zip 
WHERE 
    a.ClientID is null (Or whatever the PK is) 

Si sólo necesita una lista pesar de que solo debe usar la respuesta de HansUp

+0

Desearía tener suficientes representantes para toparme esto. Me encantaba jugar con esto, aunque al final solo necesitaba una lista ^^ – Lantiis

0

No estoy seguro de que la construcción de una solución completamente automatizada vale la pena el trabajo: usted nunca será capaz de construir un código que le considere Doe, Jane, 1234 Sunset Boulevard y Doe, Jane, 1234 Sunset Bd como la misma persona, ¡aunque estas son realmente la misma persona!

Si yo fuera tú, me construyo una solución de 4 pasos semi-automatizado:

  1. Combinar las dos tablas en una tabla única, agregar un campo booleano 'isDuplicate'
  2. de visualización, a través de una consulta , todos los nombres similares, y seleccionar personalmente los duplicados para ser eliminados
  3. de visualización, a través de una consulta, todos similares (lo más parecido posible) direcciones, y elegir dupllicates que se eliminarán
  4. Eliminar todos los registros donde 'isDuplicate' se establece en True

¡Por supuesto, este método es interesante solo si los nombres duplicados \ direcciones son limitados! Supongo que sus filtraciones le darán unos cientos de registros para considerar. ¿Cuánto tiempo tardará? una hora o dos? ¡Creo que vale la pena el trabajo! Al automatizar este proceso, nunca podrá asegurarse de que se eliminen todos los duplicados, ni tampoco estará seguro de que no se eliminó ningún cliente legítimo. Al hacer el trabajo de esta manera, estarás seguro de tu resultado.

0

Estoy buscando una mejor manera de hacer esto también, pero me sorprendió que la respuesta aquí sea un poco "difícil". Dado que no hay una manera simple de hacerlo, unirse automágicamente, hay una manera fácil de usar las funciones nativas de Access.

Utilice el asistente de consultas para crear una consulta "Incompleta". Esto creará una lista de participantes que existen en una, pero no en ambas tablas (especifique cuál durante el asistente). Luego puede agregar esos registros o crear una nueva tabla a su gusto.

No conozco una forma de combinar datos de registro en este paso, ya que es mucho más complicado.

+0

¡Bienvenido a stackoverflow! Esta no es una respuesta a la pregunta, le gustaría hacer una nueva pregunta y referirse a esta en su lugar. – MCollard

Cuestiones relacionadas