Ayúdenme a pulir esta rutina

Saludos.
Tengo dos tablas una RN0001 y otra CONT_DUP, ambas poseen la clave contrib. Lo que deseo hacer es saber que registros que están en CONT_DUP no figuran en RN0001, y si no figura añadir en una nueva tabla (DUPLICA.DBF) los valores de ID, CONTRIB y NOMB. Yo recién estoy aprendiendo visual fox y desearía me ayudaran en encontrar una forma más optima o en todo caso pulir esta rutina que he creado
USE RN0001 IN 1
Use cont_dup in 2
SE LE 1
COPY STRUC TO DUPLICA
GO TOP IN 1
COUN TO TEMP1
SELEC 2
COUN TO TEMP2
GO TOP IN 2
FOR I=1 TO TEMP2
SELECT 1
GO TOP IN 1
FOR T=1 TO TEMP1
IF NOT INLIS(CONT_DUP.Exp_1,RN0001.CONTRIB)INSER INTO DUPLICA(ID,CONTRIB,NOMB) VALUES(RN0001.ID,RN0001.CONTRIB,RN0001.NOMB)
Endif
SKIP IN 1
Endfor
SKIP IN 2
Endfor
Muchas Gracias
Respuesta
1
Prueba con esta instrucción SQL todo en una sola linea.
Select CONT_DUP.ID,CONT_DUP.CONTRIB,CONT_DUP.NOMB from CONT_DUP not in (select distinct RN0001.CONTRIB from RN0001) into table DUPLICA
Muchísimas gracias me fue de gran ayuda
Hola Bjmar, gracias por tu pronta ayuda. Cuando pego y modifico la rutina para que funcione con las variables reales que poseo me sale un mensaje de error:
El comando contiene una frase o palabra clave no reconocida
Te agradeceria revizaras el codigo por favor.
Te explico lo que deseo hacer:
Tabla1: RN0001
Campos: CONTRIB, ID, NOMB
Tabla2: CONT_DUP
Campos: CONTRIB
Ahora lo que deseo hacer es saber que registros de la Tabla2, no se encuentran en la Tabla1. Y estos valores, de la tabla2 que no se encuentren en la Tabla1, sean impresos en otra tabla llamada DUPLICA
Ahora que te digo esto me he dado cuenta que la rutina que hago también esta mal, voy viendo por mi parte, pero si tienes algunas rutinas más cortas para poder hacerlo te lo agradecería.
Muchas gracias
Perdón se me paso un campo, esta es la version completa
Select CONT_DUP.ID, CONT_DUP.CONTRIB, CONT_DUP.NOMB from CONT_DUP where cont_dup.contrib;
Not in (select distinct RN0001.CONTRIB from RN0001) into table DUPLICA

2 respuestas más de otros expertos

Respuesta
1
SELECT * FROM RN0001 AS A FULL JOIN CONT_DUP AS B ON A.CONT_DUP = B.CONT_DUP
De este sql resultante, todos aquellos que tengas campos nulos son los que no están en una u otra tabla
Respuesta
1
Checate con esto:
USE RN0001 IN 0
Use cont_dup in 0
SELECT RN0001
COPY STRUC TO DUPLICA
select CONT_DUP
SCAN
SELECT RN0001
SCAN
IF NOT INLIS(CONT_DUP.Exp_1,RN0001.CONTRIB)
INSER INTO DUPLICA(ID,CONTRIB,NOMB) VALUES (RN0001.ID,RN0001.CONTRIB,RN0001.NOMB)
ENDIF &&LAS ULTIMAS 3LINEAS IDENTICAS A LO TUYO.
SELECT RN0001
ENDSCAN
SELECT CONT_DUP
ENDSCAN
* PARA EMPEZAR, USA AL ABRIR UNA TABLA LA CLAUSULA "IN 0" EN LUGAR DE UN "IN x", PUES CON ESTOY YA NOTENDRIAS QUE ESTAR PENDIENTE DE QUE POSICION FUE LA ULTIMA QUE USASTE Y TAN SOLO CON EL ALIAS PUEDES REFERIRTE A LA TABLA.
* USA SCAN/ENDSCAN EN LUGAR DE UN FOR, ES MAS EFICIENTE.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas