Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Duplicidad de lineas en un grid con select contra firebird (https://www.clubdelphi.com/foros/showthread.php?t=15589)

saruman91 28-10-2004 11:25:27

Duplicidad de lineas en un grid con select contra firebird
 
:confused: Buenos dias, tengo un problema a la hora de visualizar el resultado de una consulta contra firebird en una rejilla. El problema consiste en que algunos registros aparecen duplicados, supongo que sera un problema de la consulta SQL ejecutada, pero de momento me he ofuscado con que la consulta esta mal. Pero si alguien puede repasarla para ver si esta bien o mal, lo agradeceria enormemente. Utilizo para la consulta un componente TIBQuery al cual enlaza un TIBTransaction un TDataSource que descarga el resultado de la sentencia contra el Grid. La consulta es la siguiente:



Intervienen en la consulta un total de 9 tablas que son BOOKING, PUERTOS_SIC, DESTINOS_SIC, EXPEDIENTES, CUENTAS, DEPOSITOS, MERCANCIAS_GRAL, MERCANCIAS_TARIC, MMP2



select

B.BOOKING,

B.SCHEDULE,

D1.DESTINO AS ORIGEN_INICIAL,

P1.NOMPTO AS PUERTO_ORIGEN,

P2.NOMPTO AS PUERTO_DESTINO,

D2.DESTINO AS DESTINO_FINAL,

B.EXPEDIENTE,

E.FAPERTURA,

E.CONTENEDOR,

E.PRECINTO,

E.PRECINTOLIN,

B.NUMBL,

B.CLIENTE,

C.NOMBRE AS NOMBRE_CLIENTE,

B.CLIENTEPERSONA,

B.DESTINO,

B.DOCUMENTACION,

B.ORIGEN,

B.COORDEN,

B.BULTOS,

B.EMBALAJEN,

T1.TIPO_ENVASE AS EMBALAJE,

B.PESO,

B.VOLUMEN,

B.MERCANCIA,

M1.MERCANCIA AS MERCANCIA_GRAL,

B.MERCANCIATARIC,

M2.NOMMER AS MERCANCIA_TARIC,

B.MERCLIBRE,

B.MMPP,

M3.DENCOM AS MERCANCIA_PELIGROSA,

B.DEPOSITO,

D3.DEPOSITO AS NOMBRE_DEPOSITO,

B.REFDEPOSITO,

B.IDALBARAN,

B.MARCAS,

B.OBSERVACIONES,

B.FRESERVA,

B.FENTRADA,

B.ESTRANSBORDO,

B.RECEPTOR,

B.EMBARCADOR

from

BOOKING B

left outer join SCHEDULE_SIC S on (S.SCHEDULE=B.SCHEDULE)

left outer join PUERTOS_SIC P1 on (P1.CODIGO=S.PORIGEN)

left outer join PUERTOS_SIC P2 on (P2.CODIGO=S.PDESTINO)

left outer join EXPEDIENTES E on (E.EXPEDIENTE=B.EXPEDIENTE)

left outer join CUENTAS C on (C.CODIGO=B.CLIENTE)

left outer join DESTINOS_SIC D1 on (D1.CODIGO=B.ORIGEN)

left outer join DESTINOS_SIC D2 on (D2.CODIGO=B.DESTINO)

left outer join TIPO_ENVASES T1 on (T1.CODIGO=B.EMBALAJEN)

left outer join MERCANCIAS_GRAL M1 on (M1.CODIGO=B.MERCANCIA)

left outer join MERCANCIAS_TARIC2 M2 on (M2.CODIGO=B.MERCANCIA)

left outer join MMPP2 M3 on (M3.CODIGO=B.MMPP)

left outer join DEPOSITOS D3 on (D3.CODIGO=B.DEPOSITO)

where

(B.FENTRADA is NULL)

order by

B.BOOKING, P2.NOMPTO, P1.NOMPTO;


kalimero 28-10-2004 11:50:55

Hola

Comprueba Que Los Campos De Enlace Entre Tablas Esta Bien.
Y ¿vaya Tela De Consulta? ¿has Pensado En Cuato Tardara En Ejecutarse? A Poco Que Sean Tablaqs Grandes, Eso Va Atardar Una Eternidad

Saludos

Neftali [Germán.Estévez] 28-10-2004 14:21:58

Cita:

Empezado por saruman91
Intervienen en la consulta un total de 9 tablas que son BOOKING, PUERTOS_SIC, DESTINOS_SIC, EXPEDIENTES, CUENTAS, DEPOSITOS, MERCANCIAS_GRAL, MERCANCIAS_TARIC, MMP2....

Una pregunta OFF-TOPIC, por curiosidad, ¿Qué significa _SIC que aparece al final de algunas tablas (PUERTOS_SIC, DESTINOS_SIC, ...)?

Neftali [Germán.Estévez] 28-10-2004 14:26:22

Añade un campo de la tabla S a la consula, ya que es la única tabla de la que no has añadido ningun campo (eso me ha parecido ver) y comprueba si luego siguen saliendo duplicados; Tal vez el campo de esa tabla sea el diferencial.

Usando LEFT JOIN (como usas tú) y si están bien construídos es raro que se generen duplicados, en todo caso debería haber registros de menos...

saruman91 28-10-2004 20:32:47

Este termino de SIC se refiere al Sistema de Informacion Comunitario. Yo trabajo para una empresa relacionada con el trafico de mercancias maritimas en el Puerto de Valencia, y este sistema lo ha implementado el Puerto de Valencia para que mediante mensajes XML todos los usuarios del puerto puedan enviar documentaciones e incorporarlas automaticamente a sus sistemas, y avisando a todas las personas implicadas en la operacion de que esta sucediendo en todo momento con las mercancias. Si necesitas mas informacion al respecto dimelo y te informare. De momento si estas interesado puedes ver el siguiente enlace:

http://www.ipec.es/investigaciones/T.I.C/sic.htm

saruman91 28-10-2004 23:26:38

Sobre la consulta
 
Cita:

Empezado por Neftali
Añade un campo de la tabla S a la consula, ya que es la única tabla de la que no has añadido ningun campo (eso me ha parecido ver) y comprueba si luego siguen saliendo duplicados; Tal vez el campo de esa tabla sea el diferencial.

Usando LEFT JOIN (como usas tú) y si están bien construídos es raro que se generen duplicados, en todo caso debería haber registros de menos...

Siento decirte que he revisado la consulta, he procedido introduciendo un campo de la tabla Schedule, y sigue haciendo lo mismo. Tener en cuenta que de los registros que aparecen en el grid, unos aparecen duplicados y otros no.:confused:

StartKill 29-10-2004 02:41:33

Holas,

Algo parecido em paso ;-)

El error que encontre en mi consulta fue: que las "tablas secundarias" con las que hacia un JOIN habia registros duplicados... es decir, por ejemplo que en una de tus tablas "ejemplo-TIPO_ENVASES" existen dos o mas registros con el mismo codigo... a lo mejor no le has puesto el primary key a alguna de tus tablas secundarias, o no estas condicionando bien tus join en el ON.

Your friend,

SarttKill
Lima-Perú

Nota: Comentanos si de alguna manera llegas a solucionar tu problema.


La franja horaria es GMT +2. Ahora son las 16:41:12.

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