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

[SOLUCIONADO] Relacionar campos entre dos tablas

Estas en el tema de Relacionar campos entre dos tablas en el foro de Bases de Datos General en Foros del Web. Hola todos Tengo una base de datos con dos tablas. En una esta el campo IdEstudiante y en otra tengo el campo Año entre otros ...
  #1 (permalink)  
Antiguo 05/06/2014, 10:45
paois1
Invitado
 
Mensajes: n/a
Puntos:
Relacionar campos entre dos tablas

Hola todos
Tengo una base de datos con dos tablas. En una esta el campo IdEstudiante y en otra tengo el campo Año entre otros campos. Necesito sacar la relación de los estudiantes que se matricularon en 2013 y no se matricularon en 2014. El campo Año es un campo de selección múltiple. Estoy tratando de hacer una consulta que me diga quienes tienen el campo con 2013 y no con 2014 pero entonces me sale consulta tras consulta y se torna muy largo. ¿Alguien me puede ayudar a solucionar este embrollo por favor?
  #2 (permalink)  
Antiguo 05/06/2014, 10:49
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: Relacionar campos entre dos tablas

¿Y con qué DBMS estás trabajando?...

De todo lo que dices no qued claro si es un DBMS en serio o es Access...
__________________
¿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 05/06/2014, 11:11
paois1
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Relacionar campos entre dos tablas

perdon, es Access :)
  #4 (permalink)  
Antiguo 05/06/2014, 11:18
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: Relacionar campos entre dos tablas

OK.
Dices que en una tabla tienes el ID del estudiante, y en otra el año, pero en esa otra ¿tienes algún campo que vincule esos datos? Está presente el ID del estudiante o qué datos, además del año tinees alli.
ten en cuenta que para hacer una query en la que se realice un JOIN, forzosamente debe existir algo que los empareje. Usualmente es una FK, pero si no la tienes, si ambas tablas no comparten al menos un valor, estarías haciendo un producto cartesiano, lo que es un espanto.

¿Cómo es exactamente esa segunda tabla? ¿QUé campos tiene?
__________________
¿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 05/06/2014, 11:31
paois1
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Relacionar campos entre dos tablas

OK, en la segunda tabla están los campos IdEstudiante, grado, año, sede. En la primera tabla estan los campos IDEstudiante, Nombres, Apellidos. Las dos tablas están relacionadas por el campo IdEstudiante.
  #6 (permalink)  
Antiguo 05/06/2014, 12:38
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: Relacionar campos entre dos tablas

Pues entonces es un simple:
Código SQL:
Ver original
  1. ...
  2. tabla1.idestudiante = tabla2.idestudiante AND
  3. tabla2.año = 2014
en la consulta.

¿Por qué no posteas la query usada completa? Al menos estaremos seguros de lo que estás haciendo, porque según lo explicado en el primer post, no deberías tener problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/06/2014, 08:08
paois1
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Relacionar campos entre dos tablas

Hola
Gracias por tu respuesta. Mira esto es lo que tengo.

Código SQL:
Ver original
  1. SELECT estudiantes.IdEstudiante, detalles.AÑO
  2. FROM estudiantes INNER JOIN detalles ON estudiantes.IdEstudiante = detalles.IdEstudiante
  3. GROUP BY estudiantes.IdEstudiante, detalles.AÑO
  4. HAVING (((detalles.AÑO)="2013")) AND (((detalles.AÑO)="2014"));
Y no me arroja nada, si se lo cambio por "or" me salen los resultados total de 2013 y 2014 pero no restringe los resultados a los que esten en los dos años. Mi idea era hacer una consulta que me diera los estudiantes que estan necesariamente en los dos años y luego restarlo de los alumnos que estan solo en 2013 pero aqui es donde digo que sale consulta tras consulta y se torna el proceso algo complicado. Ademas de que ya desde el primer paso, que es el codigo que posteo, tengo problemas.

Última edición por gnzsoloyo; 06/06/2014 a las 09:04
  #8 (permalink)  
Antiguo 06/06/2014, 09:12
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: Relacionar campos entre dos tablas

El problema que tiene esa consulta es que está buscando registros donde haya en el mismo campo dos valores difderentes, cosa imposible.
Ese tipo de condición debe implementarse en el WHERRE que no has puesto.
Probemos así:
Código SQL:
Ver original
  1. SELECT DISTINCT E.IdEstudiante, D.AÑO
  2. FROM estudiantes E INNER JOIN detalles D ON E.IdEstudiante = D.IdEstudiante
  3. WHERE D.AÑO BETWEEN 2013 AND 2014;
Eso, suponiendo que el campo "Año" es numérico, y no de caracteres, porque sino supongo que sería algo como:
Código SQL:
Ver original
  1. SELECT DISTINCT E.IdEstudiante, D.AÑO
  2. FROM estudiantes E INNER JOIN detalles D ON E.IdEstudiante = D.IdEstudiante
  3. WHERE Val(D.AÑO) BETWEEN 2013 AND 2014;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 06/06/2014, 10:12
paois1
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Relacionar campos entre dos tablas

Probé con el segundo ya que, efectivamente, son caracteres y pues me sale lo mismo. Los resultados totales de los estudiantes que estudiaron en 2013 y 2014 sin importar si lo hicieron solo un año o los dos; por ejemplo, Pepito Pérez estudió en 2013 pero no en 2014 y Juanito Roma estudió los dos años. Necesitaría que solo me salga Juanito Roma. ¿hay alguna forma de darle una instruccion en la que solo salga los que, como Juanito Roma, estudiaron los dos años? Gracias por tu ayuda y perdona la molestia
  #10 (permalink)  
Antiguo 15/07/2014, 11:04
paois1
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Relacionar campos entre dos tablas

Para los que le sea útil. Gracias a gnsoloyo

Código:
SELECT COUNT(idEstudiante) AS cuenta
FROM estudiantes
WHERE idEstudiante IN (
SELECT detalles.IdEstudiante
FROM detalles
GROUP BY detalles.IdEstudiante, detalles.AÑO
HAVING (((detalles.AÑO)="2013"));
)
AND 
idEstudiante IN (
SELECT detalles.IdEstudiante
FROM detalles
GROUP BY detalles.IdEstudiante, detalles.AÑO
HAVING (((detalles.AÑO)="2014"));
);

Etiquetas: access
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 09:42.