Registros de una tabla que no estan en otra (NOT IN)


([N1] Spicer) #1

Amigos,

Estoy de cabeza intentando conseguir una búsqueda de los registros de una tabla maestra, que me retorne todos aquellos que NO ESTÁN en una tabla histórica que tiene un enlace maestro a esta última.

Tengo la tabla DESPACHOS que es maestra. Y tengo la tabla CB_DESPACHOS_OPER, que tiene dos enlaces maestros: uno a DESPACHOS, y uno a OPER. En la tabla CB_DESPACHOS_OPER grabo los despachos que están relacionados con alguna operación (OPER), y la relación de Id de DESPACHO con el Id de OPER.

Pues bien, quiero todos los despachos que NO están relacionados con OPER, lo que sería equivalente en SQL algo así como…
SELECT * FROM DESPACHOS
WHERE DESPACHOS.Id NOT IN (SELECT Id FROM CB_DESPACHOS_OPER)

Me gustaría hacer esto sin tener que usar cestas… ¿será posible?

Gracias!


([N2] Mgalvezh) #2

En la tabla despachos un campo (numero de oper), un indice condicionado a (numero de oper = 0) o isempty o lo que sea, en la tabla oper, actualización a la tabla despachos campo (numero de oper) formula 1. cuando leas por ese indice solo estan los que no tienen operaciones, bueno eso se me ha ocurrido de repente, puede haber mas formas, clar.


([N1] mvilalta) #3

Prueba algo asi:
recorrer DESPACHOS
cargar historico cb_des_oper
if syslistsize = 0
añadir a salida


([N1] wikan) #4

Índice complejo con la condición que te dice Miguel.


([N1] Spicer) #5

Amigos,

Muchas gracias por las sugerencias. Me parece que a estas alturas, debiera haber alguna forma más directa de hacer una consulta del tipo NOT IN… pero en fin.


([N1] Juan) #6

Cambia el Chip amigo, Velneo no es SQL, la potencia de Velneo son los indices, aquí en Velneo no puedes consultar nada si antes no defines indices, una de las malas practicas de SQL es que el los defina de acuerdo a las consultas de manera interna sin tu intervencion, y el tema viene porque a veces el Planeador de ejecución de Sql o de otro DBMS, crea indices de manera indiscriminada y esto repercute en el rendimiento, el indice condicionado en Velneo es una forma de lograr lo que quieres y por cierto eso no existe en ninguna otra plataformas, solo practicando te sentirás cómodo y poco a poco cambiando de Chip. Saludos y suerte.


([N3] pacosatu) #7

Hola Juan.

No es cuestión solo de cambiar el chip, la culpa la tiene Velneo por intentar comparar la Base de Datos Real, que solo unos cuantos sabemos lo que es, con el motor SQL de un SGBDR.

En SQL la Lógica de Negocio simplemente le pide a la Base de datos “lo que quiere obtener”, sin preocuparse de cómo lo obtiene.
En Velneo debemos tener previsto siempre con antelación lo que nos van a pedir, para decirle a la Lógica de Negocio “cómo obtener los datos”.

SQL es un lenguaje de Consulta de datos, en Velneo no existe tal herramienta.

Seguramente, la mayoría de suscriptores de Velneo preferimos el encorsetamiento y bien controlado sistema de consultas de Velneo frente a la flexibilidad y muchas veces prácticas “caóticas” de SQL.

Rapidez de consulta y estabilidad de Velneo frente a dinamismo y pérdida de control en SQL.

Saludos
Paco Satué