Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Access 2007: Hacer Join con Datos Similares

Estas en el tema de Access 2007: Hacer Join con Datos Similares en el foro de Bases de Datos General en Foros del Web. Hola, primero dejenme presentarme ya que este es mi primer mensaje en el foro. Acude a ustedes directamente preguntando porque en realidad no se como ...
  #1 (permalink)  
Antiguo 25/08/2009, 10:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta Access 2007: Hacer Join con Datos Similares

Hola, primero dejenme presentarme ya que este es mi primer mensaje en el foro.

Acude a ustedes directamente preguntando porque en realidad no se como buscar mi problema en especifico.

Tengo dos tablas en mi base de datos:
Código:
- Tabla1: Nombre, Direccion, No. Ext, No. Int, Telefono
- Tabla2: Nombre, Domicilio, Pedidos
NOTA: Estas dos tablas no estan ligadas por un valor identico.

Lo que necesito es crear una consulta que me arroje los siguientes datos:

Código:
Tabla1.Nombre, Tabla1.Telefono, Tabla2.Pedidos
Mi gran problema es que no se como hacer el match entre los datos, creo que la mejor manera es mediante el domicilio, y a lo que me enfrento es a lo siguiente:

- Tabla2.Domicilio : Contiene la direccion en el siguiente formato: Calle. Reforma 115
- Tabla1.Direccion : Contiene la direccion en el siguiente formato: Reforma
- Tabla1.NoExt : Contiene el numero de la direccion
- Tabla1.NoInt : Contiene el numero de la direccion (cuando no esta en NoExt)

No pido que me digan exactamente que hacer pero minimo una opinion para saber como lo busco o que es lo que necesito hacer para llegar a una solucion.

Saludos y Gracias
  #2 (permalink)  
Antiguo 25/08/2009, 11:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

El inner join debes hacerlo por un campo que te permita el cruce. En este caso, el más lógico sería Nombre. Pero piensa que puedes tenerlos escritos de distintas maneras o que dos personas se llamen exactamente igual. Por eso, deberías cambiar la estructura. La tabla1 podía deber tener un id autonumérico para cada nombre con sus datos. En la tabla dos deberías tener un campo numérico, que por ej. podrías llamar refidnombre, relacionado con ese id, y el pedido. Imagino que el domicilio de esa tabla es el domicilio donde se envía el pedido. Si es así, estaría bien. Luego relacionarías por ese número, id de tabla1, que sería primary key, con el campo numérico.
Pero si tienes los nombres (imagino que nombre y apellido o apellidos) escritos de igual manera en ambas tablas, te bastará relacionar por ellos, con las salvedad que te he comentado (podría haber dos personas que se llamaran igual, nombre y apellido o nombre y apellidos).
  #3 (permalink)  
Antiguo 25/08/2009, 11:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

Primeramente muchas gracias por tu respuesta, en si mi problema es que no tengo IDs, ya que la base de datos estaba por separado y no se habian preocupado en juntarlas.

La idea es que quiero hacer match de los campos para asi ya ponerles un ID y ya no tener problemas al hacer las consultas, mi gran problema es como colocar ese id y relacionarlo en ambas tablas.
  #4 (permalink)  
Antiguo 25/08/2009, 12:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

Pues, danos pistas sobre qué campos pueden tener datos únicos que nos permitan añadir los refid numéricos. Me explicaré: nos dices que tienes tabla2.domicilio con el formato "Calle. Reforma 115" y que en los campos de la tabla1 direccion tienes "Reforma", y en NoExt y NoInt "115", por ceñirnos al ejemplo. Podrías hacer un inner join de domicilio con direccion & ' ' & (si NoExt está en blanco, el contenido de NoInt; si no, NoExt), pero tenemos un primer problema, el de las variaciones de términos empleados en domicilio antes del nombre de la calle (Calle., Avenida, etc.). Dinos las variantes que tienes ahí te echaremos una mano en lo que podamos.
  #5 (permalink)  
Antiguo 25/08/2009, 12:53
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

Ok en si las variantes son muchisimas, desde Calle, C, Av, Avenida, A; por lo que se me hace imposible enumerarlas todas, me seria muy util alguna manera de hacer un join con un porcentaje de Tolerancia, algo asi como:

Calle Reforma
y
Reforma

Compruebe los Strings, y si el mas chico coincide en un 80% con el mas grande entonces que de por hecho que es el mismo.

Entonces

Calle Reforma
C Reforma
y
Refrma

Seria considerado como el mismo.
  #6 (permalink)  
Antiguo 25/08/2009, 13:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

Quizás no sea necesario, pues si lo último es el número, sumando el número de caracteres de NoExt o NoInt con direccion y sumando uno más, ya tendrás la referencia de corte en número de caracteres de derecha a izquierda en el campo domicilio. Eso si no pones nada después del número.
Ofrécenos algunos datos de ejemplo para que te ayudemos a preparar la consulta, que con esos, tendrá un porcentaje mucho más elevado, según creo (100% sin contar con los errores a la hora de escribir los datos).
  #7 (permalink)  
Antiguo 25/08/2009, 14:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

Mira algo parecido a esto. Todavía no he contemplado la posibilidad de que el número esté en el campo NoInt, pero eso puede hacerse luego.
SELECT*, (tabla1.direccion & ' ' & tabla1.NoExt) AS Expr1, Right(tabla2.domicilio,(Len(tabla1.direccion) +Len(NoExt)+1)) AS porcion
FROM tabla1 inner join tabla2 ON tabla1.direccion & ' ' & tabla1.NoExt = Right(tabla2.domicilio,(Len(tabla1.direccion) +Len(NoExt)+1)) ;
  #8 (permalink)  
Antiguo 26/08/2009, 04:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

O mejor aún que eso, que da problemas en las combinaciones, puedes seguir estos pasos:
1) Creas el campo de tipo texto llamado direccion en tabla1
2) Lo pueblas con los datos de domicilio y NoExt o NoInt.
UPDATE tabla1 SET tabla1.domicilio = tabla1.direccion & ' ' & IIf(tabla1.NoExt Is Null,tabla1.NoInt,tabla1.NoExt);
3) haces un cruce para comprobar los datos:
SELECT * from tabla1 INNER JOIN tabla2 ON right(tabla2.domicilio,len(tabla1.domicilio) ) = tabla1.domicilio
4) creas un id en la tabla2. Primary key y autonumérico (lo generará automáticamente)
5) creas un campo numérico en la tabla1 llamado, por ej., refid
6) actualizas el dato refid de tabla1 con el id de acuerdo con la relación que hemos establecido:
UPDATE tabla1 INNER JOIN tabla2 ON right(tabla2.domicilio,len(tabla1.domicilio))=tabl a1.domicilio SET tabla1.refid = tabla2.id
ejecutando esta consulta como de actualización.
7) Y ya tienes las dos tablas que pueden relacionarse con id y refid
Podrás comprobarlo así:
SELECT Tabla1.*, Tabla2.*
FROM Tabla2 INNER JOIN Tabla1 ON Tabla2.ID = Tabla1.refid;

Naturalmente, habrá fallos, sobre todo cuando hayas escrito más de un espacio entre la dirección y el número, o cuando hayas escrito los números o el resto de lo que escribes de diferente manera, pero eso es algo inevitable.
Luego te toca decidir qué campos irán en cada tabla y eliminar lo que consideres oportuno. Pero eso dependerá de la naturaleza y función de los datos.
  #9 (permalink)  
Antiguo 27/08/2009, 10:10
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

estoy revisando y haciendo pruebas con la informaciòn que me proporcionas, te mantengo al tanto de lo sucedido...

De ante mano gracias
  #10 (permalink)  
Antiguo 28/08/2009, 10:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

Ok, aqui te va lo que paso:

Me parece excelente tu idea solo que hay un gran problema al realizar el update en el paso 6:

UPDATE tabla1 INNER JOIN tabla2 ON right(tabla2.domicilio,len(tabla1.domicilio))=tabl a1.domicilio SET tabla1.refid = tabla2.id

Que pasa si no hace match un dato de la tabla1 con la tabla2, creo que es por eso que access se paraliza.

Lo deje mas de 18 horas trabajando y pues esta en freeze el access entonces me parece que es eso.

Saludos y gracias por tu ayuda
  #11 (permalink)  
Antiguo 28/08/2009, 11:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

Si no hace match, como dices, no actualiza el dato de esos registros porque no se produce el cruce. El retraso no se debe, creo, a eso. ¿Cuántos registros tienes?
¿Te hace bien el paso 3? Es decir,
SELECT * from tabla1 INNER JOIN tabla2 ON right(tabla2.domicilio,len(tabla1.domicilio) ) = tabla1.domicilio
Si lo hace, no debería darte problema en hacer lo otro, creo. A mí me lo ha hecho. Pero, claro, yo manejo pocos datos.
¿que significa que se paraliza? ¿has pulsado sobre el botón que es el cierre signo de admiración para activar la actualización?
  #12 (permalink)  
Antiguo 28/08/2009, 12:03
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

son 142406 en tabla 1 y 203543 en tabla 2, si le di en ejecutar (signo de admiracion) y access se traba, no puedo hacer nada en access pero la computadora esta funcionando normal, como si access estubiera trabajando, pero en la parte de abajo donde dice consulta, ya no avanza se queda estatico. El administrador de tareas me dice que access esta activo.

Al momento de hacer el paso 3 se ejecuta correctamente la consulta pero access se vuelve como torpe, muy lento. Es por eso que me pase a verificar mejor haciendo el update en una copia de las tablas.

Sigo haciendo pruebas, si se te ocurre alguna otra cosa te agradezco me lo comuniques.

Saludos
  #13 (permalink)  
Antiguo 28/08/2009, 12:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

Lo que intento es crear una tabla con los datos que hacen match

mira hice esto:

SELECT * INTO [clientes] from Afiliado2 INNER JOIN SLP2 ON right(Afiliado2.Domicilio,len(SLP2.Domicilio))=SLP 2.Domicilio

En la tabla SLP2 aparece el domicilio SIN prefijo
En la tabla Afiliado 2 aparece el domicilio CON prefijo

Nuevamente access se me queda congelado.
  #14 (permalink)  
Antiguo 28/08/2009, 12:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

se me ocurre otra idea, que es crear un campo domicilio2 en la tabla 2, y, si siempre escribes algo antes del nombre de la calle, plaza, etc., es decir, si hay un espacio en blanco antes de la dirección (ej. Calle Reforma 115), actualizar ese dato del siguiente modo:
UPDATE tabla2 SET domicilio2 = Medio$([domicilio],EnCad([domicilio],' ')+1)
en inglés así:
UPDATE tabla2 SET domicilio2 = Mid$([domicilio],Instr([domicilio],' ')+1)

No olvides indexar ese campo domicilio2 de la tabla2 y el campo domicilio de la tabla1, y por supuesto, refid de tabla1.

luego, en el update que se cuelga cambias y haces el inner join con ese campo
UPDATE tabla1 INNER JOIN tabla2 ON tabla2.domicilio2=tabla1.domicilio SET tabla1.refid = tabla2.id


A ver si hay suerte.

Es lo que se me ocurre

Última edición por jurena; 30/08/2009 a las 03:23
  #15 (permalink)  
Antiguo 31/08/2009, 11:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Access 2007: Hacer Join con Datos Similares

Muchas gracias Jurena, al parecer este ultimo fue el que funciono...

me falta corroborar datos y hacer mas pruebas pero de ante mano te doy las gracias por tu ayuda

Saludos
  #16 (permalink)  
Antiguo 31/08/2009, 11:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Access 2007: Hacer Join con Datos Similares

de nada, JaimeMontiel2. Te tocará revisar. Te será fácil, creo, mediante consultas encontrar los que no tienen referencia en la tabla1, pues te bastará con buscar aquellos de la tabla1 cuyo refid sea 0 o Null, según el valor por defecto de ese campo.
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:25.