Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-07-2012
dosru3das dosru3das is offline
Registrado
 
Registrado: may 2008
Ubicación: Junín, Buenos Aires, Argentina
Posts: 2
Poder: 0
dosru3das Va por buen camino
Exclamation SQL con subconsultas

Hola amigos tengo un terrible problema de tiempo de respuesta... Tengo un SQL donde en su Clausula WHERE tiene como condicion el resultado de otros SQL y tarda aprox 1 minuto en responder a veces mas lo cual es inaceptable. El SQL es el siguiente. Debe devolverme las materias de un alumno de un instituto que esten en condiciones de ser cursadas. Las condiciones son igual que las de cualquier inst, Debe tener las correlativas aprob, pero a su vez estas si no estan aprobadas por final debo controlar que no esten vencidas, pero tambien deben aparecer las materias que ya aprobo pero se le vencio la cursada ( la cursada se vence si no aprueba el final dentro de las 15 fechas publicadas o si rinde mal en 3 ocaciones el final.) Es muy rebuscado y la consulta que idee funciona bien pero extremadamente lenta.
Código SQL [-]
Select MA1.*,
            M.Materia

From MateriasPorAlumno MA1,
       Materias M

Where (MA1.RelacConcarr = :RCC) and
      (MA1.recursada = False) and                      (en estas primeras 3 lineas restrinjo la busqueda a las mats del alumno en particular con RCC)
      (M.Codigo = MA1.CodMateria) and
            
                                                                (Aca comienzan las condiciones a las Materia)
      ((MA1.CursadaAprobada = 'NC') or        (NC = No cursada)
       (MA1.CursadaAprobada = 'Desap.') or
       ((MA1.CursadaAprobada = 'Libre') and (FinalAprobado = 'Desap.')) or  (Libre = no la cursa solo rinde el final)

       ((MA1.CursadaAprobada = 'Aprob.') and (MA1.finalAprobado ='Desap.') and
                      ((15 <= (Select Count(FF.CodMateria)                (Si pasaron mas de 15 fechas de finales despues que aprobo la cursada)
                               From  FechasdefinalesporCarrera FF
                               where (FF.Fecha > MA1.Fechafincursada) and
                                     (FF.CodCarrera = MA1.codCarrera) and
                                     (FF.CodMateria = MA1.CodMateria))) or
                       ((MA1.Seanoto1Final and  (MA1.Nota1Final <> 0)) and
                        (MA1.Seanoto2Final and  (MA1.Nota2Final <> 0) ) and          (si desap las 3 posib de rendir el final)
                        (MA1.Seanoto3Final and  (MA1.Nota3Final <> 0) ))) )) and

                                                              (Aca controlo si la cant de materias correlativas de esa materia son las mismas que aprobo)
      ((Select Count(CR.CodMateriaCorrelativa)
        From  CorrelatividadesCursadas CR
        Where (CR.CodCarrera= MA1.CodCarrera) and
             (CR.CodMateria = MA1.CodMateria)) =
                                                (Select Count(MA2.CodMateria)
                                                 From  MateriasPoralumno MA2,
                                                       CorrelatividadesCursadas CR
                                                 Where (CR.CodCarrera=MA1.CodCarrera) and
                                                       (CR.CodMateria = MA1.CodMateria) and
                                                       (MA2.CodMateria=CR.CodMateriaCorrelativa) and
                                                       (MA2.Relacconcarr=MA1.Relacconcarr) and
                                                       (MA2.CursadaAprobada = 'Aprob.') and
                                                       ((MA2.FinalAprobado='Aprob.') or (((MA2.FinalAprobado='Desap.') or (FinalAprobado='NR'))and
                                                       (15 > (Select Count(FF.CodMateria)
                                                             From  FechasdefinalesporCarrera FF
                                                             where (FF.Fecha > MA2.Fechafincursada) and
                                                                   (FF.CodCarrera = MA2.codCarrera) and
                                                                   (FF.CodMateria = MA2.CodMateria))) and
                                                                   (Not MA2.Seanoto1Final or
                                                                    Not MA2.Seanoto2Final or
                                                                    Not MA2.Seanoto3Final)))))

Tal vez haya una manera mas facil de solucionar esto. Espero alguien me pueda ayudar... un saludo cordial a todos.

Última edición por Casimiro Notevi fecha: 09-07-2012 a las 18:18:12.
Responder Con Cita
  #2  
Antiguo 09-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias


Creo que sería conveniente que dijeras qué base de datos estás usando, además de poner una descripción de tablas/campos y exactamente qué quieres obtener.
Saludos.
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
subconsultas con count y Max ZLEON SQL 1 11-10-2008 06:00:03
Subconsultas c748a SQL 0 19-04-2005 13:41:23
2 SubConsultas con Maximo y Minimo AGAG4 SQL 18 03-09-2004 21:34:03
SubConsultas Carlex SQL 3 05-08-2004 14:23:55
Subconsultas en ORACLE Investment Oracle 4 19-06-2003 00:50:04


La franja horaria es GMT +2. Ahora son las 12:17:00.


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