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

Ayuda a comparar cadenas.

Estas en el tema de Ayuda a comparar cadenas. en el foro de Mysql en Foros del Web. Hola necesito algo de ayuda. Tengo el siguiente problema. Tengo 2 tablas. Tabla1: Vehiculos id_vehiculo ------------ Razon_Social ____________________________ 1 ----------------- COMPUMAC 2 ---------------GANNET S.A DE ...
  #1 (permalink)  
Antiguo 27/01/2009, 12:56
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 10 meses
Puntos: 0
Ayuda a comparar cadenas.

Hola necesito algo de ayuda.

Tengo el siguiente problema. Tengo 2 tablas.

Tabla1: Vehiculos
id_vehiculo ------------ Razon_Social
____________________________
1 ----------------- COMPUMAC
2 ---------------GANNET S.A DE C.V
3 ---------------GAS PLUS S.A DE C.V
4 --------------- GAS PLUS SA DE CV
5 --------------- GAS PLUS SA DE C.V



Tabla2: Proveedores
id_proveedor ------- RFC ------------ -------Razon_Social
25 ---------------- GPL940725MI7 ---------- GAS PLUS S.A DE C.V
26 ----------------- GAN910116HD7 ---------- GANNET S.A DE C.V
27 --------------------CAOM5006108K3 --------- COMPUMAC

Lo que quiero hacer, es obtener por cada vehiculo, el RFC del Proveedor, porque la Razon_Social no me sirve, pero el problema es que en vehiculos tengo la Razon_Social que es texto, y como pueden ver, a veces son los mismos en teoría, pero varia por un punto o letras.Tengo en la tabla de proveedores el RFC que es lo que necesito, y la Razon_Social, que es como púedo llegar a Vehiculos. He querido hacerlo con el like, pero no se como.

El problema es que la bd ya me la pasaron asi, y me piden sacar los rfc. SI yo la hubiera hecho, utilizo algun id para relacionar ambas tablas.

Bueno espero que alguien que sepa sql, me ayude, ya no se que hacer.
  #2 (permalink)  
Antiguo 27/01/2009, 15:38
 
Fecha de Ingreso: marzo-2004
Mensajes: 32
Antigüedad: 20 años, 8 meses
Puntos: 0
Respuesta: Ayuda a comparar cadenas.

Supongo que no puedes añadir ningún campo más, y tienes que sacarlo con lo que tienes.

Yo he hecho algo parecido haciendo comparaciones mediante LIKE, por ejemplo se me ocurre que si todos los clientes tienen un "espacio" en su propio nombre, compararas:

SELECT * FROM tabla1, tabla2
WHERE SUBSTRING_INDEX(tabla1.Razon_Social, ' ' ,1)= SUBSTRING_INDEX(tabla2.Razon_Social, ' ' ,1)

también podrías comparar

WHERE SUBSTRING_INDEX(tabla1.Razon_Social, ' ' ,1) LIKE CONCAT('%',SUBSTRING_INDEX(tabla2.Razon_Social,' ',1),'%')

o incluso los primeros 4 caracteres

WHERE LEFT(tabla1.Razon_Social,4)=LEFT(tabla2.Razon_Soci al,4)

todo depende de encontrar algún denominador común que te funcione, pero si hay muchos registros es muy difícil encontrarlo para que sea infalible con todo, porque si en una tabla ponen GAS PLUS, y en la otra GAZ PLUS...
  #3 (permalink)  
Antiguo 27/01/2009, 15:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Ayuda a comparar cadenas.

Si no puedes cambiarlo, te propongo esto
SELECT v.id_vehiculo, p.RFC FROM Vehiculos v INNER JOIN Proveedores p ON LEFT(v.Razon_Social,6) = LEFT(p.Razon_Social,6)

Lo que hago es establecer el join con los 6 primeros caracteres (espero que sean suficientemente discriminatorios), pues parece que hasta ahí no hay muchas diferencias.
De todas formas había que ver el modo de cambiar todo para dejarlo bien.
Saludos

Edito: se me adelantó Alexins. Saludos.
  #4 (permalink)  
Antiguo 30/01/2009, 10:43
 
Fecha de Ingreso: enero-2009
Mensajes: 141
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Ayuda a comparar cadenas.

yo te recomiendo q compares las cedenas con php antes de hacer la consulta algo asi

if(strcmp(v.Razon_Social,p.Razon_Social)==0)
{
$cant=strlen(Razon_Social);
SELECT v.id_vehiculo, p.RFC FROM Vehiculos v INNER JOIN Proveedores p ON LEFT(v.Razon_Social,$can) = LEFT(p.Razon_Social,$can)

}

espero te sirve 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 13:37.