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 30-06-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Consulta partiendo de una tabla detalle.

Hola:

Hoy estoy un poco "espeso" y no logro montar un consulta.

Trabajo con Access y con dos tablas maestro-detalle:
Código Delphi [-]
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.
__________________
Sonríe. Mañana puede ser peor.

Última edición por jplj fecha: 01-07-2007 a las 19:42:42.
Responder Con Cita
  #2  
Antiguo 30-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código SQL [-]
Select * From Maestro, Detalle
Where Detelle.curso = 'francés' and 'inglés' and 'árabe'
Order by Loquesea;
Saludos
Responder Con Cita
  #3  
Antiguo 30-06-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Muchas gracias.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #4  
Antiguo 01-07-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Hola:

He probado la sentencia que propones incluyendo INNER JOIN:

Código SQL [-]
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.
__________________
Sonríe. Mañana puede ser peor.

Última edición por jplj fecha: 01-07-2007 a las 19:43:12.
Responder Con Cita
  #5  
Antiguo 01-07-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Código SQL [-]
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;
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 01-07-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
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.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #7  
Antiguo 01-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código SQL [-]
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
Responder Con Cita
  #8  
Antiguo 02-07-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Creo que deberías cambiar los AND por OR.
Código SQL [-]
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.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #9  
Antiguo 02-07-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
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".
Código Delphi [-]
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.

Código SQL [-]
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.

Código SQL [-]
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.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #10  
Antiguo 02-07-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Prueba con esto

Código SQL [-]
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #11  
Antiguo 03-07-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
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
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #12  
Antiguo 03-07-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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
Problema tabla Maestro-detalle en la q la pk de t.detalle formad por 2cods de la maes akinom38 Varios 1 09-11-2007 19:27:44
Consulta maestro detalle. jplj SQL 5 30-05-2007 20:24:14
Problema con consulta en Maestro-Detalle TrUnkS SQL 2 11-10-2006 00:20:47
Consulta Maestro Detalle Acker SQL 1 10-07-2006 19:25:58
Actualizar tabla detalle erickperez6 Conexión con bases de datos 0 04-05-2004 03:19:09


La franja horaria es GMT +2. Ahora son las 19:52:49.


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