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

[SOLUCIONADO] Obtener tuplas con valores repetidos

Estas en el tema de Obtener tuplas con valores repetidos en el foro de Bases de Datos General en Foros del Web. Hola, soy novato en esto y tengo una duda sobre álgebra relacional. Tengo, por poner un ejemplo, una tabla Estudiante con los campos código, nombre ...
  #1 (permalink)  
Antiguo 28/04/2013, 22:26
 
Fecha de Ingreso: abril-2013
Mensajes: 2
Antigüedad: 11 años
Puntos: 0
Pregunta Obtener tuplas con valores repetidos

Hola, soy novato en esto y tengo una duda sobre álgebra relacional.

Tengo, por poner un ejemplo, una tabla Estudiante con los campos código, nombre y asignatura, considerando que un estudiante puede ver varias asignaturas. Mi duda es sobre cómo obtener los estudiantes que estén viendo más de una asignatura.

Apenas comienzo en esto y no tengo claro cómo hacerlo. Me gustaría también que me dieran un consejo para modelar mejor el asunto. Muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 29/04/2013, 01:07
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Obtener tuplas con valores repetidos

Creo que a esa explicación le faltan tablas o le faltan campos. Podría ser una tabla adicional que contenga los campos estudiante y código. Este último coincidiría con el de la otra tabla y luego mediante las consultas puedes saber qué estudiante consulta qué materias. Te está faltando en tu lógica el lugar donde vincular a los estudiantes con las asignaturas. Tal vez lo más apropiado sea esto de crear otra tabla.
  #3 (permalink)  
Antiguo 29/04/2013, 20:02
 
Fecha de Ingreso: abril-2013
Mensajes: 23
Antigüedad: 11 años
Puntos: 1
Respuesta: Obtener tuplas con valores repetidos

Julio, en relación a tu consulta, podrías recuperar los estudiantes que están viendo más de una materia como sigue:

SELE nombre, COUNT(*) as cuenta FROM estudiante GROUP BY nombre HAVING cuenta > 1

Sin embargo, creo que podrías normalizar un poco más tu base de datos. Por ejemplo, podrías plantear

Estudiante
id - integer PK
dni - unique
nombre - varchar
apellido - varchar
materia - integer FK (Materia)

Materia
id - integer PK
nombre - varchar

La consulta entonces quedaría

SELECT a.dni, COUNT(*) as cuenta FROM estudiante a, materia b WHERE a.materia = b.id GROUP BY a.dni HAVING cuenta > 1

Entonces si la cuenta es mayor que uno aparecerá en los resultados y significa que estará cursando más de una materia. Tambien si necesitas los datos completos de los que están cursando dos o más materias podrías hacerlo en dos pasos (quizás en uno con subconsultas):

1) SELECT a.dni as doc, COUNT(*) as cuenta FROM estudiante a, materia b WHERE a.materia = b.id GROUP BY doc HAVING cuenta > 1 INTO TABLE mas1materia

2) SELECT * FROM estudiante a, materia b WHERE a.materia = b.id AND a.dni EXISTS (SELECT doc FROM mas1materia)

Espero te haya servido y no confundido!
Saludos.

Etiquetas: algebra, relacional
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 03:39.