Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

saber Registros dentro de una tabla A que no existan dentro de la tabla B segunda VER

Estas en el tema de saber Registros dentro de una tabla A que no existan dentro de la tabla B segunda VER en el foro de Mysql en Foros del Web. hola amigos hace dias me ayudaron ah resolver el problema haciendo un query para saber que registros dentro de una tabla A que no existan ...
  #1 (permalink)  
Antiguo 01/12/2010, 16:22
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta saber Registros dentro de una tabla A que no existan dentro de la tabla B segunda VER

hola amigos hace dias me ayudaron ah resolver el problema haciendo un query para
saber que registros dentro de una tabla A que no existan dentro de la tabla B

aqui dejo el link:
http://www.forosdelweb.com/f86/saber...abla-b-853180/

pero ahora tengo una duda anterirormente utilice un para metro de busqueda digamos materia_id pero que pasa si son mas de 1 materia

este es mi query usando buscando una materia

Código:
SELECT 
mod1_alumnos_materias.mod10_usr_id,
mod1_alumnos_materias.mod1_mat_id,
mod1_alumnos_materias.mod1_grupos_id,
mod10_usuarios.mod10_usr_usuario,
mod10_usuarios.mod10_usr_nombre,
mod10_usuarios.mod10_usr_apaterno,
mod10_usuarios.mod10_usr_apmaterno,
mod1_materias.mod1_mat_grado,
mod1_materias.mod1_mat_descReal,
mod1_docentes_materias.mod10_usr_id
FROM
mod1_alumnos_materias,
mod10_usuarios,
mod1_materias,
mod1_docentes_materias
WHERE
mod1_alumnos_materias.mod1_mat_id =  '841' AND
mod1_alumnos_materias.mod1_grupos_id =  '20' AND
mod10_usuarios.mod10_usr_id = mod1_alumnos_materias.mod10_usr_id AND
mod1_materias.mod1_mat_id = mod1_alumnos_materias.mod1_mat_id AND
mod1_docentes_materias.mod1_mat_id = mod1_alumnos_materias.mod1_mat_id AND
mod1_docentes_materias.mod1_grupos_id = mod1_alumnos_materias.mod1_grupos_id AND 
mod1_alumnos_materias.mod10_usr_id NOT IN  (
SELECT 
mod1_encuesta_evaluacion_docentes.mod10_usr_id
FROM
mod1_encuesta_evaluacion_docentes 
WHERE 
mod1_encuesta_evaluacion_docentes.mod1_mat_id =  '841' AND
mod1_encuesta_evaluacion_docentes.mod1_grupos_id =  '20' AND
mod1_alumnos_materias.mod10_usr_id = mod1_encuesta_evaluacion_docentes.mod10_usr_id
)

que podria hacer si son mas materias usando estos ids
('49', '854', '135', '405', '95', '149')

espero sus comentarios saludos

gracias
__________________
gerardo
  #2 (permalink)  
Antiguo 01/12/2010, 16:30
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 4 meses
Puntos: 8
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

puedes adaptar la seccion de la clausula where

Código SQL:
Ver original
  1. WHERE
  2. mod1_encuesta_evaluacion_docentes.mod1_mat_id IN ( '841', '......')AND

o si prefieres

Código SQL:
Ver original
  1. WHERE
  2. mod1_encuesta_evaluacion_docentes.mod1_mat_id IN ( SELECT IdMateria FROM Materias) AND

OJO: solo te doy ideas de tu query aun que podrias optimizarla un poco.

saludos.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #3 (permalink)  
Antiguo 01/12/2010, 16:57
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

ahh o osea tendria que ser asi

Código SQL:
Ver original
  1. SELECT
  2. mod1_alumnos_materias.mod10_usr_id,
  3. mod1_alumnos_materias.mod1_mat_id,
  4. mod1_alumnos_materias.mod1_grupos_id,
  5. mod10_usuarios.mod10_usr_usuario,
  6. mod10_usuarios.mod10_usr_nombre,
  7. mod10_usuarios.mod10_usr_apaterno,
  8. mod10_usuarios.mod10_usr_apmaterno,
  9. mod1_materias.mod1_mat_grado,
  10. mod1_materias.mod1_mat_descReal,
  11. mod1_docentes_materias.mod10_usr_id
  12. FROM
  13. mod1_alumnos_materias,
  14. mod10_usuarios,
  15. mod1_materias,
  16. mod1_docentes_materias
  17. WHERE
  18. mod1_alumnos_materias.mod1_mat_id IN  ('49', '854', '135', '405', '95', '149') AND
  19. mod10_usuarios.mod10_usr_id = mod1_alumnos_materias.mod10_usr_id AND
  20. mod1_materias.mod1_mat_id = mod1_alumnos_materias.mod1_mat_id AND
  21. mod1_docentes_materias.mod1_mat_id = mod1_alumnos_materias.mod1_mat_id AND
  22. mod1_docentes_materias.mod1_grupos_id = mod1_alumnos_materias.mod1_grupos_id AND
  23. mod1_alumnos_materias.mod10_usr_id NOT IN  (
  24. SELECT
  25. mod1_encuesta_evaluacion_docentes.mod10_usr_id
  26. FROM
  27. mod1_encuesta_evaluacion_docentes
  28. WHERE
  29. mod1_encuesta_evaluacion_docentes.mod1_mat_id IN  ('49', '854', '135', '405', '95', '149') AND
  30. mod1_alumnos_materias.mod10_usr_id = mod1_encuesta_evaluacion_docentes.mod10_usr_id
  31. )

si funcionan pero si tarda algo..

espero sus comentarios amigos
y gracias Snaft_J1 por la ayuda

saludos
__________________
gerardo
  #4 (permalink)  
Antiguo 01/12/2010, 21:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

Habría que probar algo así, por ejemplo (y de paso usar alias para evitar esos nombres de tabla taaan largos):
Código SQL:
Ver original
  1. SELECT
  2.     MAM.mod10_usr_id,
  3.     MAM.mod1_mat_id,
  4.     MAM.mod1_grupos_id,
  5.     MU.mod10_usr_usuario,
  6.     MU.mod10_usr_nombre,
  7.     MU.mod10_usr_apaterno,
  8.     MU.mod10_usr_apmaterno,
  9.     MM.mod1_mat_grado,
  10.     MM.mod1_mat_descReal,
  11.     MDM.mod10_usr_id
  12. FROM
  13.     (SELECT MA.*
  14.     FROM mod1_alumnos_materias MA
  15.         LEFT JOIN mod1_encuesta_evaluacion_docentes MEED USING(mod10_usr_id)
  16.     WHERE MEED.mod10_usr_id IS NULL) MAM
  17.     INNER JOIN
  18.     mod10_usuarios MU ON MAM.mod10_usr_id = MU.mod10_usr_id
  19.     INNER JOIN
  20.     mod1_materias MM ON MM.mod1_mat_id = MAM.mod1_mat_id
  21.     INNER JOIN
  22.     mod1_docentes_materias MDM ON
  23.         (MDM.mod1_mat_id = MAM.mod1_mat_id AND MDM.mod1_grupos_id = MAM.mod1_grupos_id)
  24. WHERE
  25.     MAM.mod1_mat_id IN  ('49', '854', '135', '405', '95', '149')
Me faltan tablas de datos para probar si la consulta está bien armada o no, pero la idea sería algo así.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 02/12/2010, 09:14
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

gracias gnzsoloyo

probare asi como lo dices

saludos
__________________
gerardo
  #6 (permalink)  
Antiguo 02/12/2010, 10:09
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 4 meses
Puntos: 8
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

hola chalchis, si ponesu na imagen de tu modelo entidad relacion podría ayudarte con la lentitud de tu query, hasta ahora muestro lo que he comprendido de ella y optimizado, solo esta pendiente hacer la segunda exclusion, mira como quedaria hasta ahora y por lo que vi, pienso que no falta mucho.
Código MySQL:
Ver original
  1.         A.mod10_usr_id,
  2.         A.mod1_mat_id,
  3.         A.mod1_grupos_id,
  4.         U.mod10_usr_usuario,
  5.         U.mod10_usr_nombre,
  6.         U.mod10_usr_apaterno,
  7.         U.mod10_usr_apmaterno,
  8.         M.mod1_mat_grado,
  9.         M.mod1_mat_descReal,
  10.         D.mod10_usr_id
  11.          mod1_materias M Inner Join mod1_alumnos_materias A
  12.          On ( M.mod1_mat_id = A.mod1_mat_id ) Inner Join mod10_usuarios U
  13.          On ( U.mod10_usr_id = A.mod10_usr_id ) Inner Join mod1_docentes_materias D
  14.          On (
  15.               D.mod1_mat_id    = A.mod1_mat_id And
  16.               D.mod1_grupos_id = A.mod1_grupos_id
  17.             )
  18.          /* pENDIENTE DE INFORMACINO PARA COMPLETAR
  19.             Left Join mod1_encuesta_evaluacion_docentes E
  20.          On ( A.mod10_usr_id = E.mod10_usr_id )*/
  21.         ( A.mod1_mat_id In ('49', '854', '135', '405', '95', '149') ) --And
  22.         --- Pendiente de informacion je je je

OJO: solo es otra opcion a la planteada anteriormente por gnzsoloyo
Saludos.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #7 (permalink)  
Antiguo 02/12/2010, 11:50
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

gracias Snaft_J1

aqui las tablas relacionadas que uso para el query



Uploaded with ImageShack.us
__________________
gerardo
  #8 (permalink)  
Antiguo 02/12/2010, 13:04
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 4 meses
Puntos: 8
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

hola, este query deberia regresarte los usuarios que no tienen encuesta
Código MySQL:
Ver original
  1.         A.mod10_usr_id,
  2.         A.mod1_mat_id,
  3.         A.mod1_grupos_id,
  4.         U.mod10_usr_usuario,
  5.         U.mod10_usr_nombre,
  6.         U.mod10_usr_apaterno,
  7.         U.mod10_usr_apmaterno,
  8.         M.mod1_mat_grado,
  9.         M.mod1_mat_descReal,
  10.         D.mod10_usr_id
  11.          mod1_materias M INNER JOIN mod1_alumnos_materias A
  12.          On ( M.mod1_mat_id = A.mod1_mat_id ) INNER JOIN mod10_usuarios U
  13.          On ( U.mod10_usr_id = A.mod10_usr_id ) INNER JOIN mod1_docentes_materias D
  14.          On (
  15.               D.mod1_mat_id    = A.mod1_mat_id AND
  16.               D.mod1_grupos_id = A.mod1_grupos_id
  17.             )
  18.          LEFT JOIN mod1_encuesta_evaluacion_docentes E
  19.          On ( A.mod10_usr_id = E.mod10_usr_id )
  20.         ( A.mod1_mat_id Is Null )  /* Esto lo incluyes si necesitas hacer algo mas especifico
  21.          and
  22.         ( A.mod1_mat_id IN ('49', '854', '135', '405', '95', '149') ) */

y si necesitas una lista especifica de materias pues las incluyes, pero croe que solo asi deberia traer todos los usuario que posee materias y docentes asignados pero que no tienen encuestas.

pruebalo y me cuestas, saludos jejeje.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #9 (permalink)  
Antiguo 02/12/2010, 13:45
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: saber Registros dentro de una tabla A que no existan dentro de la tabla B

asi es Snaft_J1 eso es lo que trato de hacer optener
los usuarios que no han hecho tal encuesta relacionada con tal materia

saludos
__________________
gerardo

Etiquetas: registros, ver, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:36.