![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola jafera,
yo lo haría de un sólo paso... 1.- Ya has cargado la tabla temporal de los datos nacionales... Ahora, inserta los de la tabla autonómica que no estén en la nacional:
Observa la segunda parte "SELECT ... LEFT JOIN ... Si ejecutas esto en el ibexpert por ejemplo, incluyes el DNI de la tabla definitiva en la select ( DEFINITIVA.DNI) y quitas la where, te saldrán todos los registros de la tabla autonomica, y el DNI de los que que encuentre en la tabla nacional. Aquellos cuyo DNI de la tabla definitiva están vacíos son los que no encuentra en la tala definitiva. Si incluyes la clausula "WHERE DEFINITIVA.DNI IS NULL" le estás diciendo que sólo te devuelva los registros que están en la tabla autonomica y no en la definitiva. Una vez que hayas hecho esas comprobaciones, ejecuta toda la sentencia. Inserta en la tabla definitiva todos los registros que devuelva la select que te digo. Si afinas con la select, todo en un solo paso. Ten en cuenta que el orden de los campos en la select son importantes, ya que se cargan en el mismo orden que has puesto en la INSERT. Es decir, si en primer campo de la insert es el DNI, en la select el primer campo debe ser el DNI. ( no especificas el significado de los capos C1, C2, ...). También ten en cuenta que la condición del where puede ser diferente ( no conozco en detalle las tablas) y por lo que comentas interviene algún campo más. Te dejo de deberes que hagas lo siguiente: 1.- Jugar con la select hasta que te salgan los registros que necesites, así como la información que necesites ( campos en orden correcto). 2.- Ver la diferencia entre el INNER JOIN y el LEFT JOIN. 3.- Hacer la inserción ( que te tardará 15 segundos máximo). Prueba y nos cuentas. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#2
|
||||
|
||||
|
Gracias por la nueva ayuda en cuanto tenga un minuto lo pruebo.
Para la clausula where, intervienen dos campos DNI y COD_CAT pues como comenté anteriormente en otro post, una persona (DNI) puede tener dos categorias (COD_CAT), por ejemplo un comisario (yo) puedo tener licencia de comisario y de cicloturista a la vez, con lo cual aparezco dos veces en la tabla. Repito busco unos minutos de tranquilidad y pruebo, esto de los join no lo tengo muy por mano y veo que puede ser interesante, ya que lo que haré es borrar toda la tabla definitiva antes del insert y hacer un insert masivo en vez de actualizar registros y luego añadir si no existen. Por cierto es correcto para hacer el left join colocar el código así?:
Si es correcto luego en la clausula WHERE tendré que poner lo mismo, no? Gracias de nuevo Josep |
|
#3
|
||||
|
||||
|
No
![]() El inner sirve para enlazar las distintas tablas con sus campos relacionados. El where es para filtrar (aunque con los filtros también se puede "enlazar")
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
Sí,
a esto se le llaman alias. Cuando cruzas dos tablas, pueden tener campos con el mismo nombre. Para que el motor sepa al campo de qué tabla te refieres, debes especificarle o el nombre de la tabla, o el alias que le hayas puesto.
es lo mismo que
A ver si tienes suerte. Juega con las select primero hasta que te devuelva los registros que quieras con la información que necesites. Luego ya tetiras por la inserción. Respecto a la información, no la tienes demasiado normalizada, ya que supongo que repites información de una persona por categoría. Para normalizarla tendrías que tener una tabla de personas, y otra de categorías en las que está federado cada persona, con las consiguientes relaciones entre las tablas. Lo que ocurre es que esto te "complica" la gestión ya que tienes que manejar más tablas y relaciones entre ellas, y puede que eso no sea lo que más te convenga en estos momentos. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#5
|
||||
|
||||
|
Te respondo exactamente a lo del WHERE.
Tal y como indica Casi, si en el inner pones el DNI y la categoría, no hace falta que lo pongas en la where. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#6
|
||||
|
||||
|
Gracis de nuevo, ufff aun no he podido realizar las pruebas, estoy en ascuas, jejeje.
El tema de la "normalizacion", no lo he puesto yo así, me viene dado por el fichero txt, en el que el campo COD_CAT es el nexo de union con la descripcion de la categoria en la tabla categorias. Cuando importo el fichero de texto, COD_CAT es un valor entero que se guarda en el registro de cada corredor y lo que no puedo tener a la vez son dos DNI con dos COD_CAT iguales, entiendo que lo ideal seria una tabla con los corredores una sola vez con varios campos COD_CAT_1, COD_CAT_2 etc. pero de momento no es así ya que la cantidad de repeticiones es bastante baja en relacion a los 60 mil y pico registros. Resumiendo, voy a hacer lo siguiente: 1- Recibo txt nacional y lo cargo en la tabla temporal 2- Recibo txt autonomico y lo cargo en la tabla temporal 3- Borro toda la tabla definitiva 4- Inserto los datos que quiera de la tabla temporal necional. 5- Hago el left join con los datos de la tabla temporal autonomica. Es correcto así? Por cierto todo lo relacionado con el insert lo hago con un componente IBQuery normal en el form, no? Saludos Josep Última edición por jafera fecha: 17-07-2013 a las 13:33:07. |
|
#7
|
||||
|
||||
|
Cita:
Cita:
Cita:
Cita:
Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#8
|
||||
|
||||
|
Buenas de nuevo.
He empezado con las pruebas, el insert a la tabla general ha funcionado de maravilla, en un tiempo record tanto desde el IBConsole como desde Delphi, un problema menos. Luego intento ejecutar el script siguiente en IBConsole y me da error at line 1 - conversion from string""
Creo que he seguido al pie de la letra las instrucciones de escritura del script en cuestión. No se donde puedo haberme equivocado. Gracias por vuestro tiempo Josep |
|
#9
|
||||
|
||||
|
Cita:
Igual no me explique claramente. Saludos de nuevo Josep |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Aportación del código de un stored procedure para conversión literal de números | birmain | Firebird e Interbase | 12 | 16-07-2015 19:12:29 |
| Insertar desde una tabla con loop en stored procedure | Fita | Firebird e Interbase | 2 | 04-06-2013 00:39:23 |
| Problema con Stored Procedure para actualizar tabla con datos de otra tabla. | Adrian Murua | MySQL | 4 | 04-02-2012 02:54:49 |
| Insertar en Un Stored Procedure | DasGrun | Firebird e Interbase | 7 | 13-12-2011 23:46:20 |
| Stored Procedure !!! | Ledian_Fdez | C++ Builder | 0 | 02-03-2010 14:01:29 |
|