Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
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.


Código SQL [-]
Select Tabla1.DNI, Tabla2.DNI FROM Tabla1
INNER join Tabla2 ON (Tabla1.DNI = Tabla2.DNI)
Where Tabla2.DNI = '99999'

es lo mismo que
Código SQL [-]
Select T1.DNI, T2.DNI FROM Tabla1 T1
INNER join Tabla2 T2 ON (T1.DNI = T2.DNI)
Where T2.DNI = '99999'

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 -
Responder Con Cita
  #2  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
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 -
Responder Con Cita
  #3  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Empezado por jafera Ver Mensaje
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.
Bueno, una cosa es cómo te llegue la información y otra es cómo la cargas en tu sistema. Podrías normalizarla en el proceso.

Cita:
Empezado por jafera Ver Mensaje
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.
Eso es un chapucilla. Lo correcto es una tabla de corredores y otra tabla de corredores_categorías con campos idcategoria, DNI, COD_CAT al menos, y que DNI y COD_CAT no puedan tener valores repetidos.


Cita:
Empezado por jafera Ver Mensaje
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í?
Sí.


Cita:
Empezado por jafera Ver Mensaje
Por cierto todo lo relacionado con el insert lo hago con un componente IBSQL normal en el form, no?
En principio sí. Es una sentencia normal.


Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
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""

Código SQL [-]
 
INSERT INTO CTR0003 ("DORSAL", "NOM", "COGNOM1", "COGNOM2", "CODI_CAT", "LLICENCIA", "DNI", "CLUB", "PUBLICITAT", "CODIUCI")
SELECT C1, C2, C3, C4, C6, C7, C8, C9, C11, C12 FROM CTR0003C
LEFT JOIN CTR0003 ON ( CTR0003C.C8 = CTR0003.DNI AND CTR0003C.C6 = CTR0003.CODI_CAT)
WHERE CTR0003.DNI IS NULL

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
Responder Con Cita
  #6  
Antiguo 17-07-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Desconozco los componentes IB*, pero si con el ibconsole funciona... No se sí habrá algún otro componente de esa familia que te permita hacerlo.
Si no es así puedes hacer una store procedure e invocarla desde el programa.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Hola.

El error lo da en IBConsole, no en el componente.

Cita:
Empezado por jafera Ver Mensaje
Luego intento ejecutar el script siguiente en IBConsole y me da error at line 1 - conversion from string""
Gracias por todo lo demás ya tengo una parte "cocida" jejeje.

Saludos
Responder Con Cita
  #8  
Antiguo 17-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 585
Poder: 20
jafera Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
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.
Correcto lo de los alias ya los uso, yo me referia a si era correcto poner dos comparaciones en el parentesis, para que buscara los registros en que se cumplieran las dos condiciones DNI=DNI y COD_CAT=COD_CAT por el tema comentado de dos veces el mismo DNI con distinto COD_CAT.

Igual no me explique claramente.

Saludos de nuevo

Josep
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 10:26:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi