Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Problemas con un left outer join en FB2

Estaba decidido a esperar un tiempo en cambiarme a FB2, pero después de leer el hilo Compatibilidad Interbase 6 / Firebird 2.0 migré.

La primera impresión fue buena, todo funcionaba bien, incluso las UDFs desarrolladas por mi.

El problema vino cuando quise ejecutar un script de creación de mi base de datos con el cual estoy actualmente trabajando.
El error se produce al ejecutar lo siguiente:

Código SQL [-]
...
left outer join provincias on (localidades.idprovincia = provincias.id)
...

El error que me da es que para FB2 idprovincia no pertenece a localidades. Por arriba de la linea que me da el error tengo otros left outer join, y no me dan problemas, con lo que descarto que FB2 tenga otra sintaxis.

Luego volví a FB15.x y el script se ejecuto sin problemas.

Alguna idea?

Saludos
TJose
Responder Con Cita
  #2  
Antiguo 13-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por TJose
... left outer join provincias on (localidades.idprovincia = provincias.id) ...
Puede ser porque deberías poner "alias", algo así como esto:
Código SQL [-]
left outer join provincias pro on (loc.idprovincia = pro.id)
Responder Con Cita
  #3  
Antiguo 13-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Cita:
Por Casimiro
Puede ser porque deberías poner "alias", algo así como esto
Podría ser, pero pienso que no es el problema ya que como mencioné hay arriba del que me da error varios left outer join

Código SQL [-]
left outer join
         tiposvacunacion on (actas.idtipovacunacion = tiposvacunacion.id)
      left outer join
         renspas on (actas.idrenspa = renspas.id)
      left outer join
         productores on (renspas.idproductor = productores.id)
      left outer join
         localidades locp on (productores.idlocalidad = locp.id)
      left outer join
         provincias on (localidades.idprovincia = provincias.id)
      left outer join
         regimenestenencia on (renspas.idregimentenencia = regimenestenencia.id)
      left outer join
         actividades on (renspas.idactividad = actividades.id)
      left outer join
         establecimientos on (renspas.idestablecimiento = establecimientos.id)
      left outer join
         localidades loce on (establecimientos.idlocalidad = loce.id)
      left outer join
         vacunas vac_af on (actas.idvacunaaftosa = vac_af.id)
      left outer join
         marcas ma_af on (vac_af.idmarca = ma_af.id)
      left outer join
         identificaciones on (actas.ididentificacion = identificaciones.id)
      left outer join
         vacunas vac_br on (actas.idvacunabrucelosis = vac_br.id)
      left outer join
         marcas ma_br on (vac_br.idmarca = ma_br.id)
      left outer join
         vacunadores on (actas.idvacunador = vacunadores.id)

La linea con el error está en rojo. Como se ve antes del error tengo algunos con alias y otros no.

Cuando instalé FB2 use el archivo de la base de datos creada con FB1.5.3 sin problemas.

Saludos
TJose
Responder Con Cita
  #4  
Antiguo 14-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por TJose
El error que me da es que para FB2 idprovincia no pertenece a localidades. Por arriba de la linea que me da el error tengo otros left outer join, y no me dan problemas, con lo que descarto que FB2 tenga otra sintaxis.
Pues si es ese el error, ¿podría ser que realmente sea eso?, que exista algún idprovincia en otra tabla?
Responder Con Cita
  #5  
Antiguo 14-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Declaracion de la tabla localidades

Código SQL [-]
...
create table Localidades(
   ID dID,
   Localidad dTexto50,
   Pedania dPedania,
   IdDepartamento dIdNull,
   IdProvincia dId
);
...
alter table Localidades add constraint fk_Localidades_01 foreign key (IdDepartamento) references Departamentos(ID);
alter table Localidades add constraint fk_Localidades_02 foreign key (IdProvincia) references Provincias(ID);
...

en la unica tabla que aparece idprovincia es en localidades, de todas manera si existiera en otra no debiera dar problemas ya que estoy haciendo referencia a la tabla:

Código SQL [-]
localidades.idprovincia

Puede ser un bug de FB2? No lo creo. Con la 1.5.3 [en Windows (SS) y FreeBSD (CS)] y 1.5.4 en win no tengo problemas

Saludos
TJose
Responder Con Cita
  #6  
Antiguo 14-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si quieres puedes pasarnos la metadata para crear la base de datos y probar nosotros...
Responder Con Cita
  #7  
Antiguo 14-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y puedes poner la sentencia completa que ejecutas?
Responder Con Cita
  #8  
Antiguo 14-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Hola Casimiro

Simplemente cuando creo mi base de datos, ejecutando el script, en este caso desde SQLHammer, se planta en la línea mencionada, dandome el error (no recuerdo textualmente en ingles) campo desconocido, idprovincia no pertenece a la tabla localidades.

Saludos
TJose
Responder Con Cita
  #9  
Antiguo 14-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código SQL [-]
left outer join
         tiposvacunacion on (actas.idtipovacunacion = tiposvacunacion.id)
      left outer join
         renspas on (actas.idrenspa = renspas.id)
      left outer join
         productores on (renspas.idproductor = productores.id)
      left outer join
         localidades locp on (productores.idlocalidad = locp.id)
      left outer join
         provincias on (localidades.idprovincia = provincias.id)
      left outer join
         regimenestenencia on (renspas.idregimentenencia = regimenestenencia.id)
      left outer join
         actividades on (renspas.idactividad = actividades.id)
      left outer join
         establecimientos on (renspas.idestablecimiento = establecimientos.id)
      left outer join
         localidades loce on (establecimientos.idlocalidad = loce.id)
      left outer join
         vacunas vac_af on (actas.idvacunaaftosa = vac_af.id)
      left outer join
         marcas ma_af on (vac_af.idmarca = ma_af.id)
      left outer join
         identificaciones on (actas.ididentificacion = identificaciones.id)
      left outer join
         vacunas vac_br on (actas.idvacunabrucelosis = vac_br.id)
      left outer join
         marcas ma_br on (vac_br.idmarca = ma_br.id)
      left outer join
         vacunadores on (actas.idvacunador = vacunadores.id)

El problema es que tienes declarado "localidades locp" y "localidades loce" y "localidades" a secas.
Deberías darle otro alias al que te da error para que sepa a cual pertenece.

O cambiar:
provincias on (localidades.idprovincia = provincias.id)
por
provincias on (loce.idprovincia = provincias.id)

Por ejemplo.

Última edición por Casimiro Notevi fecha: 14-02-2007 a las 15:58:22.
Responder Con Cita
  #10  
Antiguo 14-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
OK, pruebo y te aviso
Responder Con Cita
  #11  
Antiguo 14-02-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Efectivamente Casimiro, cambié la línea por
Código SQL [-]
left outer join
         localidades locp on (productores.idlocalidad = locp.id)
      left outer join
         provincias on (locp.idprovincia = provincias.id)
      left outer join ...

y funcionó.

Tengo otro script que genera los datos provenientes de una migración, Access->script->Firebird. Al final de este script borro los procedimientos y tablas temporales utilizados para dicha migración. Bien, en FB1.5 no había problemas, en FB2 me dice que los procedimeintos están en uso. No me importa mucho esto, los puedo borrar después, pero la pregunta es porqué pasa esto.

Ahora están comentados, pero resalto en rojo donde da el error

Código SQL [-]
execute procedure spxLocalidadesX;
execute procedure spxProductoresX;
execute procedure spxEstablecimientosX;
execute procedure spxRenspasX;

--drop procedure spxLocalidadesX;
--drop procedure spxProductoresX;
--drop procedure spxEstablecimientosX;
--drop procedure spxRenspasX;

insert into localidades(localidad,idprovincia) select lx.localidad, lx.idprovincia from localidadesx lx order by lx.id;
insert into productores(nors,cuit,documento,direccion,idlocalidad) select pr.nors, pr.cuit, pr.documento, pr.direccion, pr.idlocalidad from productoresx pr order by pr.idproductor;
insert into establecimientos(cuerporenspa,nombre,idlocalidad,hectareas,paralelo,meridiano,letra,hectareas) select es.cuerporenspa,es.nombre,es.idlocalidad,0,es.paralelo,es.meridiano,es.letra, es.hectareas from establecimientosx es order by es.idestablecimiento;
insert into renspas(renspa,idactividad,idregimentenencia,idproductor,idestablecimiento) select renspa,idactividad,idtenencia,idproductor,idestablecimiento from renspasx rn where idestablecimiento <> 0 and idproductor <> 0 order by rn.renspa;

--drop table localidadesx;
--drop table productoresx;
--drop table establecimientosx;
--drop table renspasx;

Gracias Casimiro

Saludos
TJose
Responder Con Cita
  #12  
Antiguo 14-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues ahí ya no sé que responderte, pero por aventurar algo, prueba a lanzar un script con la primera parte:
Código SQL [-]
 execute procedure spxLocalidadesX; 
execute procedure spxProductoresX; 
execute procedure spxEstablecimientosX; 
execute procedure spxRenspasX;

Y luego otro script con los borrados
Código SQL [-]
--drop procedure spxLocalidadesX;
--drop procedure spxProductoresX; 
--drop procedure spxEstablecimientosX; 
--drop procedure spxRenspasX;

Puede que así puedas borrarlo.

Última edición por Casimiro Notevi fecha: 19-02-2007 a las 14:50:24.
Responder Con Cita
  #13  
Antiguo 19-02-2007
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
pero pienso que no es el problema
Pues si q es este el problema, lea el archivo ambiguity.txt en la carpeta de FB2 y comprenderas el pq..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
Respuesta



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
LEFT OUTER JOIN 1 tabla contra 6 mas jjorell DB2 1 28-11-2006 18:52:23
Consulta sobre left / Right outer join ContraVeneno MS SQL Server 2 06-07-2006 15:18:12
Duplicados con LEFT OUTER JOIN Cabanyaler MS SQL Server 11 17-11-2005 08:46:23
LEFT OUTER JOIN e INNER JOIN Juntos alcides SQL 3 08-07-2005 18:06:27
Left Outer Join en MSSQL Viet SQL 5 26-08-2003 21:24:25


La franja horaria es GMT +2. Ahora son las 00:59:39.


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