![]() |
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; |
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 |
Cita:
|
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... |
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 |
Sobre la consulta
Cita:
|
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 13:00:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi