Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   listar registros que estan en una tabla que no estan en otra (https://www.clubdelphi.com/foros/showthread.php?t=85158)

gulder 07-02-2014 06:30:43

listar registros que estan en una tabla que no estan en otra
 
cordial saludo foro como andan espero que bien, mi pregunta es tengo dos tablas necesito sacar los datos de una tabla que no están en la otra pero que cumplan con varias condiciones les explico mejor, esta son las tablas en cuestión:


lo que quiero es traer las filas de la tabla carga académica que no están en periodos_calificados para un año lectivo y periodo especifico, también debe cumplir con id_sede,id_jornada,id_grado,grupo havia intentado esto pero no ,e resulta



Código SQL [-]
SELECT cargaacademica.id_asignatura,
       cargaacademica.id_sede,
       cargaacademica.id_jornada,
       cargaacademica.id_grado,
       cargaacademica.grupo
FROM cargaacademica

LEFT OUTER JOIN periodos_calificados

ON    cargaacademica.id_asignatura = periodos_calificados.id_asignatura and
      cargaacademica.id_sede = periodos_calificados.id_sede  and
      cargaacademica.id_jornada = periodos_calificados.id_jornada and
      cargaacademica.id_grado = periodos_calificados.id_grado and
      cargaacademica.grupo = periodos_calificados.ID_GRUPO and
      cargaacademica.ano_lectivo = periodos_calificados.ano_lectivo and
      periodos_calificados.ano_lectivo=2013 and
      periodos_calificados.id_periodo=4

espero que me puedan colaborar cordialmente guldergan

duilioisola 07-02-2014 09:41:25

Prueba poniendo este último where.
Lo que hace es que el join te muestra todos los registros y el where te quita los que al unir no haya encontrado un registro para la tabla periodos_calificados y por lo tanto están con un valor nulo.

Código SQL [-]
SELECT cargaacademica.id_asignatura,
       cargaacademica.id_sede,
       cargaacademica.id_jornada,
       cargaacademica.id_grado,
       cargaacademica.grupo
FROM cargaacademica

LEFT OUTER JOIN periodos_calificados

ON    cargaacademica.id_asignatura = periodos_calificados.id_asignatura and
      cargaacademica.id_sede = periodos_calificados.id_sede  and
      cargaacademica.id_jornada = periodos_calificados.id_jornada and
      cargaacademica.id_grado = periodos_calificados.id_grado and
      cargaacademica.grupo = periodos_calificados.ID_GRUPO and
      cargaacademica.ano_lectivo = periodos_calificados.ano_lectivo and
      periodos_calificados.ano_lectivo=2013 and
      periodos_calificados.id_periodo=4

WHERE
   periodos_calificados.id_asignatura is null

gulder 07-02-2014 15:14:24

hola duilioisola gracias por responder, modifique la consulta que me dijiste pero me retorna una gran cantidad de registros, lo que me debe retornar son solo unos cuantos no se que esta pasando




te dejo una imagen de la consulta para que observes cordial saludo

duilioisola 07-02-2014 16:58:03

Obviamente debes agregar al where el resto de condiciones necesarias.

Por ejemplo:

Código Delphi [-]
WHERE
And cargaacademica.ano_lectivo = 2013

gulder 07-02-2014 17:42:57

Pero no se que tantas condiciones me tocaría agregar en el where hay me perdi totalmente, muchas gracias por colaborarme..

duilioisola 10-02-2014 08:55:45

Según tu pregunta :
Cita:

o que quiero es traer las filas de la tabla carga académica que no están en periodos_calificados para un año lectivo y periodo especifico, también debe cumplir con id_sede,id_jornada,id_grado,grupo havia intentado esto pero no ,e
El WHERE debería filtrar todos estos campos. Algo así:
Código SQL [-]
SELECT cargaacademica.id_asignatura,
       cargaacademica.id_sede,
       cargaacademica.id_jornada,
       cargaacademica.id_grado,
       cargaacademica.grupo
FROM cargaacademica

LEFT OUTER JOIN periodos_calificados

ON    cargaacademica.id_asignatura = periodos_calificados.id_asignatura and
      cargaacademica.id_sede = periodos_calificados.id_sede  and
      cargaacademica.id_jornada = periodos_calificados.id_jornada and
      cargaacademica.id_grado = periodos_calificados.id_grado and
      cargaacademica.grupo = periodos_calificados.ID_GRUPO and
      cargaacademica.ano_lectivo = periodos_calificados.ano_lectivo and
      periodos_calificados.ano_lectivo=2013 and
      periodos_calificados.id_periodo=4

WHERE
   periodos_calificados.id_asignatura is null
   AND cargaacademica.ano_lectivo = 2013
   AND cargaacademica.¿¿¿PERIODO??? = 123
   AND cargaacademica.id_sede = 456
   AND cargaacademica.id_jornada = 789
   AND cargaacademica.id_grado = 123
   AND cargaacademica.grupo = 456

gulder 10-02-2014 17:26:51

buenos dias foro, lo he logrado con un "nor exist" de la siguiente forma

Código SQL [-]
SELECT cargaacademica.cedula,
       cargaacademica.id_asignatura,
       cargaacademica.id_sede,
       cargaacademica.id_jornada,
       cargaacademica.id_grado,
       cargaacademica.grupo

FROM cargaacademica
WHERE  cargaacademica.ano_lectivo=2013 and 
NOT EXISTS 
(SELECT periodos_calificados.id_asignatura,
        periodos_calificados.id_sede,
        periodos_calificados.id_jornada,
        periodos_calificados.id_grado,
        periodos_calificados.ID_GRUPO

   FROM periodos_calificados 
  WHERE periodos_calificados.ano_lectivo=2013 AND
        periodos_calificados.id_periodo=4 and 
        periodos_calificados.id_asignatura = cargaacademica.id_asignatura AND
        periodos_calificados.id_sede = cargaacademica.id_sede AND
        periodos_calificados.id_jornada = cargaacademica.id_jornada AND
        periodos_calificados.id_grado = cargaacademica.id_grado AND
        periodos_calificados.ID_GRUPO = cargaacademica.grupo)

el unico problema es que la consulta demora ejecutándose Affected rows: 0,Time: 21.182ms 21 segundos osea que es demorado, que puedo hacer para mejorar ese tiempo, igual en la bd no hay muchos datos...


La franja horaria es GMT +2. Ahora son las 22:40:18.

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