Bases de Datos - Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

   
Vista:

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Octavio (2 intervenciones) el 05/06/2014 17:43:05
Buen día, me gustaría que me ayudaran con un query para obtener datos de una tabla teniendo condicionantes en otras.
Estoy desarrollando un sistema en php y mysql para generar exámenes.
y éstas son las tablas:
Tabla examenes

id_examen|titulo |descripcion
------1--------titulo 1------descripcion 1
------2--------titulo 2------descripcion 2
------3--------titulo 3------descripcion 3

Tabla examenes_carreras

id_examen|id_carrera
------2---------------10
------2---------------11
------3---------------11

Tabla examenes_planteles

id_examen|id_plantel
------3---------------4

La explicación es ésta: el exámen 1, lo pueden hacer todos los estudiantes ya que no hay condicionante en carreras y planteles, el examen 2 lo pueden resolver los estudiantes que cursen la carrera 10 y 11 en cualquier plantel, y por último el examen 3, que solo pueden resolverlo los estudiantes de la carrera 11 y del plantel 4.

¿Cómo podría ser la consulta que nos devuelva los exámenes permitidos por estudiante teniendo en cuenta su carrera y plantel?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Bases de Datos
- Cursos de Bases de Datos
- Temas de Bases de Datos
información
Cursos y Temas de Bases de Datos
- Manual básico de SQL DB2
- Apuntes de Ficheros y Bases de Datos
- Introducción a las bases de datos

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Salvador (8 intervenciones) el 06/06/2014 09:15:49
Hola Octavio

Mira haber esta si te vale:
1
2
3
4
5
6
7
8
9
10
11
SELECT
    E.ID_EXAMEN
    ,E.TITULO
    ,E.DESCRIPCION
  FROM Examenes
    LEFT JOIN Examenes_Carreras AS EC
      ON EC.ID_EXAMEN = E.ID_EXAMEN
    LEFT JOIN Examenes_Planteles AS EP
      ON EP.ID_EXAMEN = E.ID_EXAMEN
  WHERE EC.ID_CARRERA = 10
        AND EP.ID_PLANTEL = 4
Modifica el WHERE a tu gusto

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Octavio (2 intervenciones) el 06/06/2014 15:47:30
Gracias por contestar.

Esta consulta que me das afirmativamente satisface cuando el examen tiene las dos condiciones del WHERE. Pero no devuelve los demás exámenes a los que podría acceder el estudiante.

Lo resolví haciendo la unión de casos de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--Sin restricciones
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_planteles)
	AND id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_carreras)
UNION
--restriccion plantel
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion IN(SELECT id_evaluacion FROM examenes_planteles WHERE id_plantel=2)
	AND id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_carreras)
UNION
--restriccion carrera
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_planteles)
	AND id_evaluacion IN(SELECT id_evaluacion FROM examenes_carreras WHERE id_carrera=101)
UNION
--cumplimiento de todos las restricciones al mismo tiempo
SELECT e.id_evaluacion FROM examenes as e
	JOIN examenes_planteles as p ON e.id_evaluacion=p.id_evaluacion
	JOIN examenes_carreras  as c ON e.id_evaluacion=c.id_evaluacion
WHERE p.id_plantel=2 AND c.id_carrera = 101
ORDER BY 1

Si se quisiera añadir más restricciones se tendría que incluir el las clausulas WHERE y crear las combinaciones de restricciones correspondientes.

Espero que a alguien le sirva y no pase horas y horas investigando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar