SQL - Problema con subconsulta

 
Vista:
sin imagen de perfil
Val: 22
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por John (9 intervenciones) el 11/12/2020 17:52:00
Hola buenas, estoy intentando comprender como funcionan las subconsultas pero llevo varios días atascado en este ejercicio y no encuentro la forma de hacer que me muestre los datos que necesito.

el resultado que debe salirme es algo asi como:

NumExpediente | Nombre | Apellidos | email | NombreCursoActual | Cursos Realizados |
3 | Miguel | Zambrano | x@gm |1Bachiller | Primaria ESO



Los cursos realizados anteriormente estan en la tabla estudios_realizados, pero no se como hacer para que salgan todos los cursos realizados ya que en esa tabla solo esta el codigo que enlaza con la tabla cursos.

Os agradeceria si alguien pudiera explicarme como hacerlo gracias.


ejer5
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
sin imagen de perfil
Val: 22
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por John (9 intervenciones) el 11/12/2020 18:09:04
1
2
3
4
5
6
SELECT numExpediente, nombre, apellidos, email, repite, nombreCurso, nombreCurso as Estudios_Terminados
from alumno, cursos
where cursoActual = claveCurso
and Estudios_Terminados =(select nombreCurso from cursos, estudios_realizados, alumno
where cursos.claveCurso = estudios_realizados.claveCurso
and alumno.numExpediente = estudios_realizados.NumExp)

Tengo algo asi pero me da error :S
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por Isaias (1921 intervenciones) el 11/12/2020 19:59:05
¿Cual es el error?, ¿Cual es tu motor de base de datos?
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
sin imagen de perfil

Problema con subconsulta

Publicado por anonymous (43 intervenciones) el 11/12/2020 20:21:19
Tal como menciona Isaías, deberías colocar el error.

Pero así como lo tienes no te funciona, porque cualquier motor interpreta la instrucción "and Estudios_Terminados" como si fuese una columna de las tablas que tienes en el from, es decir alumno y cursos, luego te diría que el nombre de columna no es válido

Por otra parte veo que un alumno no puede estar cursando más de un curso, al tener esa columna: cursoActual en la tabla Alumno.

La lógica diría que un alumno podría realizar más de un curso, y si quiero saber que cursos ha realizado un alumno específico, simplemente hago un inner join entre las 3 tablas para saber el nombre de alumno, el nombre del curso y el año en que se cursó.
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
sin imagen de perfil
Val: 22
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por John (9 intervenciones) el 11/12/2020 21:13:17
Ahora mismo estoy operando desde phpmyadmin

Voy a probar haciendo lo que comentas Jorge y el error que me da es este:
#1241 - Operando debe tener 1 columna(s)
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
sin imagen de perfil

Problema con subconsulta

Publicado por anonymous (43 intervenciones) el 11/12/2020 21:41:13
Pruebalo así.

1
2
3
4
5
SELECT alu.numExpediente, alu.nombre, alu.apellidos, alu.email, alu.repite, cur.nombreCurso AS Curso_Actual, curr.nombreCurso as Estudios_Terminados
from alumno alu
INNER JOIN cursos cur ON cur.claveCurso = alu.cursoActual
INNER JOIN estudios_realizados esr ON esr.NumExp = alu.numExpediente
INNER JOIN cursos curr ON curr.claveCurso = esr.claveCurso

Te recomiendo crear claves únicas para cada estructura que sean autoincrementales, para buscar por un solo id en vez de buscar por una clave compuesta que es más lento, no quiere decir que la clave compuesta no vaya, tiene que ir porque clave de curso y numExpediente deben conformar una llave de tipo Unique, que no debería repetirse

Y el nombramiento de las columnas que sean foráneas en otras tablas, debería llamarse igual, pues eso tiende a confundir.

El error, es porque como estás intentando hacer una subconsulta, te está retornando más de un dato y usted los está intentando meter en una sola columna, pues es obvio que un alumno podría haber cursado n cursos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 22
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por Jhon (9 intervenciones) el 11/12/2020 21:50:04
Increíble Jorge funciona y sin utilizar subconsultas voy a tratar de comprender el funcionamiento porque me he quedado loco jajaja.

Muchas gracias.
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
sin imagen de perfil
Val: 22
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con subconsulta

Publicado por John (9 intervenciones) el 11/12/2020 22:05:26
Hay alguna manera de que no repita valores?
Que muestre:
3|Miguel|Carmona|H|[email protected]|No|1 BACH | Estudios primarios
........................................................................................... ESO




e5
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
sin imagen de perfil

Problema con subconsulta

Publicado por anonymous (43 intervenciones) el 11/12/2020 22:14:43
Haber así como está te repite tantas veces la información del alumno como tantos cursos haya realizado.

Lo que podrías hacer es dos consultas separadas y unirlas con Union ALL, pero como devuelven diferente cantidad de columnas, tendrías que usar comodines para ajustarla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar