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

Duda con consulta

Estas en el tema de Duda con consulta en el foro de Mysql en Foros del Web. Tengo las siguientes tres tablas grado1 claveal //la calve primaria del alumno cal1 cal2 cal3 grado2 claveal //la calve primaria del alumno cal1 cal2 cal3 ...
  #1 (permalink)  
Antiguo 18/12/2009, 15:26
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Duda con consulta

Tengo las siguientes tres tablas
grado1
claveal //la calve primaria del alumno
cal1
cal2
cal3
grado2
claveal //la calve primaria del alumno
cal1
cal2
cal3
alumnos
claveal//la clave del alumno
nombre
grado
grupo

Quiero saber los alumnos que esten dentro de la tabla alumnos y los que se encuentran dentro del grado1 con esta consulta me arroja todos los alumnos que esten dentro del grupo "A", aunque esten en el grado 2
Código MySQL:
Ver original
  1. SELECT * FROM alumnos WHERE  grupo='A'  AND exists(select * from grado1 where grado1.claveal=alumnos.claveal) ORDER BY claveal asc
y si pongo un and mas como se muestra en esta consulta, bingo esta, pero cuando un alumno esta en primero y modifico el grupo a segundo, solo muestra las calificaciones mas no los datos de alumno.
Código MySQL:
Ver original
  1. SELECT * FROM alumnos WHERE  grupo='A'  AND grado=1 AND exists(select * from grado1 where grado1.claveal=alumnos.claveal) ORDER BY claveal asc

La idea es que quiero tener los datos de los alumnos que esten dentro de alumnos pero que tambien existan dentro de grado1, y cuando modifique un alumno en la tabla alumnos y le ponga grado=2, y quisiera consultar sus calificaciones anteriores en grado 1 me aparescan los datos de la tabla alumno, espero me haya logrado explicar, llevo dias con prueba y error, pero hasta ahorita llevo puro error. gracias
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #2 (permalink)  
Antiguo 18/12/2009, 15:36
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, 5 meses
Puntos: 2658
Respuesta: Duda con consulta

Yo prefiero un clásico INNER JOIN, es más simple que meter una subconsulta en el WHERE, el cual MySQL no puede optimizar:
Código MySQL:
Ver original
  1. SELECT A.*
  2. FROM alumnos A INNER JOIN grado1 G ON A.claveal=G.claveal
  3. WHERE  grupo='A'  
  4. ORDER BY A.claveal ASC;
Además, si en tu caso ambas tablas se identifican por claveal, esto debería devolver todos los datos de la tabla alumnos, cuyas claves se correspondan con los alumnos de la tabla grado1
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/12/2009, 15:38
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con consulta

Gracias ahorita pruebo
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #4 (permalink)  
Antiguo 18/12/2009, 16:04
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con consulta

Todo parece estar bien gracias gnzsoloyo, seguire metiendo datos para ver si no tengo errores graicas
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #5 (permalink)  
Antiguo 18/12/2009, 16:23
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, 5 meses
Puntos: 2658
Respuesta: Duda con consulta

Por nada...
Saludos
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/12/2009, 16:37
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con consulta

Código MySQL:
Ver original
  1. SELECT A.*
  2. FROM alumnos A INNER JOIN grado1 G ON A.claveal=G.claveal
  3. WHERE  grupo='A'  
  4. ORDER BY A.claveal ASC

Con respecto a la consulta, si inserto un alumno en el grado de primero y el grupo b, con la consulta anterior tambien me incluye ese alumno, que puedo hacer
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #7 (permalink)  
Antiguo 18/12/2009, 17:11
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, 5 meses
Puntos: 2658
Respuesta: Duda con consulta

Existen al menos tres formas de manejarlo:
1. Modificar la consulta para que incluya más de un grupo.
2. Manejarlo con una función de agrupamiento, lo que requieriría redefinir el FROM y también los campos del SELECT, si no se quieren duplicaciones, pero si que aparezcan todos.
3. Modificar la consulta para que sólo aparezca uno de dos, y sólo si está en uno de los dos, pero no en los dos.

En el primer caso son esto alcanza:
Código MySQL:
Ver original
  1. SELECT A.*
  2. FROM alumnos A INNER JOIN grado1 G ON A.claveal=G.claveal
  3. WHERE  A.grupo IN('A' , 'B')
  4. ORDER BY A.claveal ASC

En el segundo caso, habría que poner los campos uno a uno, para que no aparezca el grupo, sino el conjunto:
Código MySQL:
Ver original
  1. SELECT A.claveal, Apellido, Nombre, Grado, GROUP_CONCAT(grupo) Grupos
  2. FROM alumnos A INNER JOIN grado1 G ON A.claveal=G.claveal
  3. WHERE  grupo='A'  
  4. ORDER BY A.claveal ASC
  5. GROUP BY A.claveal ;

En el tercer caso, había que poner las alternativas de a una:

Código MySQL:
Ver original
  1. SELECT A.*
  2. FROM alumnos A INNER JOIN grado1 G ON A.claveal=G.claveal
  3. WHERE  A.grupo = 'A' XOR  A.grupo = 'B'
  4. ORDER BY A.claveal ASC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 18/12/2009, 18:49
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Duda con consulta

Viendo tu explicacion gnzsoloyo, me asombro de todo lo que sabes gracias
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
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 22:00.