Ver la Versión Completa : Consulta partiendo de una tabla detalle.
Hola:
Hoy estoy un poco "espeso":confused: y no logro montar un consulta.
Trabajo con Access y con dos tablas maestro-detalle:
Campos Tabla Maestro
DNI
1_Apellido
2_Apellido
Nombre
...
Campos Tabla Detalle: Cursos
DNI
Curso
...
Lo que deseo obtener es un listado con los registros de la tabla maestra que tengan uno o varios cursos determinados.
Por ejemplo: saber quienes tienen el curso de francés, inglés y árabe.
Muchas gracias de antemano.
Juan P.
Caral
30-06-2007, 19:23:38
Hola
Select * From Maestro, Detalle
Where Detelle.curso = 'francés' and 'inglés' and 'árabe'
Order by Loquesea;
Saludos
Hola:
He probado la sentencia que propones incluyendo INNER JOIN:
SELECT maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2
FROM maestro INNER JOIN detalle ON maestro.dni = detalle.dni
WHERE ((detalle.curso='francés' AND 'inglés' AND 'árabe'))
ORDER BY maestro.dni;
Pero sólo obtengo los que tienen francés, tengan o no: inglés y árabe.
gluglu
01-07-2007, 12:17:36
SELECT maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2
FROM maestro INNER JOIN detalle ON maestro.dni = detalle.dni
WHERE detalle.curso='francés' AND detalle.curso='inglés' AND detalle.curso='árabe'
ORDER BY maestro.dni;
Hola:
He probado la corrección que propones y ahora la consulta no devuelve ningún registro. Y me consta que hay registros que cumplen la condición.
Caral
01-07-2007, 22:02:17
Hola
SELECT maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2, detalle.dni, detalle.curso
FROM maestro INNER JOIN detalle ON maestro.dni = detalle.dni
WHERE detalle.curso= 'francés' AND detalle.curso= 'inglés' AND detalle.curso= 'árabe'
ORDER BY maestro.dni;
Prueba asi.
Saludos
Ivanzinho
02-07-2007, 11:00:39
Creo que deberías cambiar los AND por OR.
SELECT maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2, detalle.dni, detalle.curso
FROM maestro INNER JOIN detalle ON maestro.dni = detalle.dni
WHERE detalle.curso= 'francés' OR detalle.curso= 'inglés' OR detalle.curso= 'árabe'
ORDER BY maestro.dni;
Un saúdo.
Hola:
Comentaros que con AND no se obtienen resultados y con OR se obtienen todos aquellos que tengan al menos uno de los idiomas, aunque para cada uno de ellos se obtiene un "registro".
Aplicando OR se obtiene:
12436576 MARTINEZ MENDOZA JAVIER frances
12436576 MARTINEZ MENDOZA JAVIER ingles
12436576 MARTINEZ MENDOZA JAVIER arabe
23455454 LOPEZ ALEGRIA JUAN ingles
78957559 DURAN ...... ...... arabe
84878877 JIMENEZ OLMEDO MANUEL frances
84878877 JIMENEZ OLMEDO MANUEL ingles
84878877 JIMENEZ OLMEDO MANUEL arabe
Partiendo de esta consulta que he llamado "busqueda" he creado con el asistente de Access otra que busque los duplicados.
SELECT First([maestro].[dni]) AS maestro_dniCampo, Count([maestro].[dni]) AS NúmeroDeDuplicados
FROM busqueda
GROUP BY [busqueda].maestro.dni
HAVING (((Count([maestro].[dni]))>2));
Con esta obtenemos los duplicados y modificandola para que sólo devuelva el dni puedo obtener el listado.
SELECT * FROM maestro
WHERE dni IN(SELECT First([maestro].[dni]) AS maestro_dniCampo FROM busqueda
GROUP BY [busqueda].personal.dni
HAVING (((Count([maestro].[dni]))>2)));
El problema ahora lo encuentro para sustituir en la última sentencia SQL busqueda por la sentencia que ha generado la primera consulta.
Por último explicar que la sentencia pretendo generarla dinámicamente en función de los criterios seleccionado por el usuario.
Un Saludo.
fjcg02
02-07-2007, 22:09:44
Prueba con esto
SELECT maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2
FROM maestro INNER JOIN detalle ON maestro.dni = detalle.dni
WHERE detalle.curso in ('francés','inglés','árabe')
GROUP BY maestro.dni, maestro.nombre, maestro.ape1, maestro.ape2
ORDER BY maestro.dni
HAVING count(maestro.dni)>2;
Lógicamente, con AND no se encuentran resultados ya que ningun curso tiene los tres valores a la vez.
Cuentanos cómo te ha ido.
Saludos
Hola.
fjcg02 funciona correctamente.
Agradecerte a ti y a Ivanzinho, Caral y gluglu el tiempo que habéis empleado en ayudarme a ampliar mis limitados conocimientos.
Un Saludo
;)
fjcg02
03-07-2007, 22:31:08
Encantado.
Todos tenemos conocimientos limitados, pero la experiencia hace que en cada uno el límite esté más cerca o más lejos. ;)
Saludos
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.