Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Unhappy Duplicados con LEFT OUTER JOIN

Hola compañeros.

Quisiera consultar el siguiente tema.

Asunto:
Tuplas duplicadas en consulta de varias tablas unidas por left outer join.

Problema:
Cuando realizo esta consulta, se obtienen tuplas de la tabla principal CONTRATOS duplicadas. Además he observado que se producen según el número de tuplas de las tablas esclavas que se encuentran y cumplen su WHERE. Así pues, si existe CONTRATO que cumple la WHERE, se retorna una tupla, pero si además para ese mismo CONTRATO su cliente asociado también cumple su propia clausula WHERE se retorna otra tupla, idéntica a la anterior, y si además el COMERCIAL también cumple la WHERE se obtiene otra tupla igual, de ese modo obtengo tres tuplas del mismo CONTRATO iguales en la misma consulta.

Soluciones estudiadas:
He buscado como eliminar una vez realizada la consulta incluyendo duplicados, dichas tuplas duplicadas, ya que en la consulta incluyo la clave principal de los CONTRATOS, pero no puedo realizar esta limpieza de ese modo ya que no quiero eliminar nada en el servidor, simplemente los duplicados en la consulta en el lado cliente y si ejecuto un p.e. ConsultaConDuplicados.delete y posteriormente por cuestiones de operatividad del programa se realiza un ConsultaConDuplicados.UpdateBatch quizá elimine algo por algún efecto lateral.

Tampoco puedo incluir un SELECT DISTINCT ya que hago búsqueda por un campo Memo y con este tipo de campos no se puede incluir dicha clausula.

Incluyo código (abreviado) de la consulta por si tengo algún fallo en su propio diseño.

Muchas gracias por vuestro tiempo y conocimiento. Un saludo.

Código SQL [-]

/* Retorna tots els Contratos que pasen els filtres establist amb les diferents clausules del WHERE
   Amb Rel.lació amb  
             CLIENTES y COMERCIALES
   amb telèfon o sense'll */
       
CREATE PROCEDURE ADOQ_Contratos_Clientes_Comerciales

/* Parametres del Contrato */
@NumCon_sp varchar(7), ....AS

SELECT 
   Contratos.*
FROM
   Contratos

   /* Unisc per C.Aj amb Clientes i estos amb TelefonosCli*/
   LEFT OUTER JOIN
   Clientes LEFT OUTER JOIN TelefonosCli     
                         ON TelefonosCli.CodCli_TelCli = Clientes.CodAut_Cli
   ON Clientes.CodAut_Cli = Contratos.CodCli_Con

   /* Unisc amb Comerciales */
   LEFT OUTER JOIN Comerciales
      ON Comerciales.CodAut_Com = Contratos.CodCom_Con      

WHERE  
( 
   (   (Contratos.NumCon_Con LIKE '%' + @NumCon_sp + '%' )
   AND (Contratos.FecCon_Con >= @FecIniCon_sp  AND Contratos.FecCon_Con <= @FecFinCon_sp)
   AND ((Contratos.ObsCon_Con  LIKE '%' + @ObsCon_sp + '%') OR (Contratos.ObsCon_Con IS NULL))
   )
 AND
    (    ((Clientes.TipVia_Cli  LIKE '%' + @TipVia_sp + '%')
      AND (Clientes.DirCli_Cli  LIKE '%' + @DirCli_sp + '%') 
      AND ((TelefonosCli.NumTel_telCli LIKE '%' + @NumTel_sp + '%') OR(TelefonosCli.NumTel_telCli IS NULL))
    )
 AND
    (Comerciales.NomCom_Com LIKE '%' + @NomCom_sp + '%')
)

ORDER BY Contratos.TipCon_Con
GO


__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 16-11-2005 a las 09:14:18.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 23:43:42.


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