FoxPro/Visual FoxPro - Left Join me duplica registros

 
Vista:

Left Join me duplica registros

Publicado por Gustavo Arauz (2 intervenciones) el 21/10/2010 06:14:08
Por favor quien me puede aclarar porque la siguiente consulta me duplica los registros. Inclusive con resultados incorrectos.

Son 2 tablas independientes, con una la llave para relacionarlas cod_usua y usua (tienen diferente nombre pero el mismo formato.

La idea es agregar a la tabla B470 la información de los campos usu.nomusua, usu.ag_caic, usu.proc_caic, usu.caic. Sin agregar ningún registro, Solo si la tabla USU contiene el código o llave de USUA, agregar la información a B470. Si no existe el código de usuario que se agregue la información con BLANK's.

Lo extraño es que normalmente el mismo tipo de consulta en otras Tablas sin problema. Hasta ahora en solo estas 2 Tablas no me está produciendo el resultado esperado.

SELECT ;
B470.ordEN, B470.accion,;
B470.cod_usua, B470.nom_usua, ;
B470.tipo,b470.cod_movi,B470.mov1,B470.mov2,B470.kmov, ;
B470.central, ;
B470.a, B470.distrito, B470.telefono, ;
B470.nombre,B470.ced, B470.zona, ;
B470.kfentr, B470.kfsal, B470.dur_acc, ;
B470.kacc, ;
usu.nomusua, usu.ag_caic, usu.proc_caic, usu.caic ;
FROM B470 ;
LEFT OUTER JOIN usu ;
ON (alltrim(cod_usua) = alltrim(usua)) ;
ORDER BY B470.ordEN,B470.TIPO, B470.kfentr, B470.accion

Que puedo estar haciendo mal? o Hay otra forma mejor de obtener el resultado esperado?.

Gracias de antemano,

Gustavo Arauz
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Left Join me duplica registros

Publicado por xx (378 intervenciones) el 21/10/2010 13:39:17
Creo que deberias usar inner join en lugar left outer, pero para estar seguro te recomendaria lo hagas con el diseñador de consultas y veas que sentencias SQL te genera para copiarlo y pegarlo en tu programa.

Pd. yo no estoy seguro del enlace que haces en ON (alltrim(cod_usua) = alltrim(usua))
deberias probar hacerlo sin el alltrim() y tu tabla USU debe tener un indice con clave para el campo usua. Yo generalmente abro manualmente las tablas y activo el orden requerido previamente a utilizarlo en una consulta SQL.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Left Join me duplica registros

Publicado por Gustavo Arauz (2 intervenciones) el 21/10/2010 18:36:32
Muy amable por la atención y la respuesta.
Voy por partes:
Uso el LEFT JOIN porque la intención es mantener intacta la cantidad de registros que tengo en la tabla de la izquerda (B470).
La intención es agregarle datos a la tabla de la izquierda provenientes de la Tabla de la Derecha (USU). Datos complementarios al registro de la Tabla (B470). Datos complementarios como Nombre, etc.

Con respecto al ALLTRIM(), lo debo usar para eleminar espacios en blanco que he identificado me vienen en la información que debo procesar. Esa información yo no la genero la obtengo en forma de Texto (.SDF) de un servidor.

Voy a intentar usar el Diseñador, la verdad siempre lo he evitado.

Muchs gracias por los comentarios, voy a seguir intentando.

Gustavo Arauz
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar