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

[SOLUCIONADO] Problema al hacer una consulta de una tabla a otra con clave múltiple.

Estas en el tema de Problema al hacer una consulta de una tabla a otra con clave múltiple. en el foro de Bases de Datos General en Foros del Web. Hola amigos, tengo un problema desde hace varias semanas que me trae algo obstinado. El problema corresponde a que necesito hacer una consulta de una ...
  #1 (permalink)  
Antiguo 18/05/2015, 11:50
 
Fecha de Ingreso: mayo-2015
Mensajes: 7
Antigüedad: 8 años, 11 meses
Puntos: 0
Pregunta Problema al hacer una consulta de una tabla a otra con clave múltiple.

Hola amigos, tengo un problema desde hace varias semanas que me trae algo obstinado.

El problema corresponde a que necesito hacer una consulta de una tabla llamada "defensa" a otra tabla llamada "jurados". Y al hacerlo el registro se me duplica la cantidad de veces en que cédula_estudiante se repite en jurados.

Defensa está estructurada así:

Código MySQL:
Ver original
  1. CREATE TABLE `defensa` (
  2. `codigo_defensa` int(10) NOT NULL AUTO_INCREMENT,
  3. `tesis_codigo` varchar(15) NOT NULL,
  4. `fecha_defensa` date DEFAULT NULL,
  5. `calificacion_def` varchar(11) DEFAULT NULL,
  6. `estudiante_cedula` varchar(12) NOT NULL,
  7. PRIMARY KEY (`codigo_defensa`,`estudiante_cedula`),
  8. UNIQUE KEY `estudiante_cedula_2` (`estudiante_cedula`),
  9. KEY `FKDefensa408147` (`estudiante_cedula`)
  10.  
  11. Y jurados está así:
  12.  
  13. CREATE TABLE `jurado` (
  14. `cedula_jurado` varchar(11) NOT NULL,
  15. `condicion` varchar(7) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  16. `procedencia` varchar(300) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  17. `nombre_proceso` varchar(30) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  18. `cedula_estudiante` varchar(12) NOT NULL,
  19. `estatus` varchar(8) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL,
  20. PRIMARY KEY (`cedula_jurado`,`nombre_proceso`,`cedula_estudian te`),
  21. KEY `cedula_estudiante` (`cedula_estudiante`),
  22. CONSTRAINT `jurado_ibfk_1` FOREIGN KEY (`cedula_estudiante`) REFERENCES `defensa` (`estudiante_cedula`)
Jurado tiene una relación externa con la tabla defensa por el campo cedula_estudiante a estudiante_cedula.

Ahora viene lo que quiero hacer:

Necesito hacer una consulta que me extraiga todos los datos de defensa y que a estos se le concatene la cédula de jurado.

Ejemplo

1--RR123456789--2015-03-15--Improbado--20123465 con las cédulas de los 8 jurados correspondientes.

Espero haberme explicado bien. De antemano muchas gracias.

Última edición por gnzsoloyo; 18/05/2015 a las 12:04
  #2 (permalink)  
Antiguo 18/05/2015, 12:07
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: Problema al hacer una consulta de una tabla a otra con clave múltiple.

Cita:
Necesito hacer una consulta que me extraiga todos los datos de defensa y que a estos se le concatene la cédula de jurado.
OK.
¿Y ya intentaste construir una consulta, o la idea es darte el código sin que lo intentes?
Postea lo que probaste, porque en principio no parece complciado: Sería un simple JOIN con uso de CONCAT() en el SELECT....
__________________
¿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/05/2015, 12:17
 
Fecha de Ingreso: mayo-2015
Mensajes: 7
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Problema al hacer una consulta de una tabla a otra con clave múltiple.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK.
¿Y ya intentaste construir una consulta, o la idea es darte el código sin que lo intentes?
Postea lo que probaste, porque en principio no parece complciado: Sería un simple JOIN con uso de CONCAT() en el SELECT....
Código SQL:
Ver original
  1. SELECT defensa.*, jurado.cedula_jurado
  2. FROM defensa JOIN jurado ON defensa.estudiante_cedula = jurado.cedula_estudiante
  3. WHERE defensa.codigo_defensa='$codigo_defensa' AND defensa.estudiante_cedula=jurado.cedula_estudiante
  4. AND jurado.nombre_proceso='Defensa tesis' AND jurado.estatus='Sugerido'
Esto es lo que tengo. A pesar de tener la clausula WHERE el registro de me duplica. Y solo quiero un registro.

Última edición por gnzsoloyo; 18/05/2015 a las 12:58
  #4 (permalink)  
Antiguo 18/05/2015, 13:05
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: Problema al hacer una consulta de una tabla a otra con clave múltiple.

Cita:
Esto es lo que tengo. A pesar de tener la clausula WHERE el registro de me duplica. Y solo quiero un registro.
En BBDD se considera duplicado un registro sólo cuando todos lso campos tienen valores repetidos entre dos registros cualesquiera.
En tu caso, si al menos UN campo no tiene el mismo valor, eso significa que no hay duplicidad.

Ahroa bien, recuerda que un INNER JOIN relaciona dos tablas en base a un vinculo dado por lo que se indique como relación. Si sólo relacionando por FK te devuelve dos registros, eso significa que hay dos registros d euna tabla vinculados con uno de otra, pero eso no es un error, sino en todo caso que hay una relación 1:N entre ambas tablas, o bien que hay inconsistencia de datos.
Tu dirás cual de las dos es correcta.

Limpiando tu consulta, recuerda que la relacion dada en el ON no tiene que repetirse en el WHERE. Estás trabajando con JOIN explícito...

Código SQL:
Ver original
  1. SELECT D.*, J.cedula_jurado
  2. FROM defensa D JOIN jurado J ON D.estudiante_cedula = J.cedula_estudiante
  3. WHERE
  4.     D.codigo_defensa='$codigo_defensa'
  5.    AND J.nombre_proceso='Defensa tesis'
  6.    AND J.estatus='Sugerido'
Lo que yo sospecho en base a esto es que hay efectivamente dos registros relacionados. Y s se trata de una relacion Defensa/Jurado diferente en cada caso, entonces te está faltando una condición en el WHERE que las discrimine.
POstea un ejemplo claro de los datos que te devuelve.
__________________
¿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 18/05/2015, 13:22
 
Fecha de Ingreso: mayo-2015
Mensajes: 7
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Problema al hacer una consulta de una tabla a otra con clave múltiple.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que yo sospecho en base a esto es que hay efectivamente dos registros relacionados. Y s se trata de una relacion Defensa/Jurado diferente en cada caso, entonces te está faltando una condición en el WHERE que las discrimine.
POstea un ejemplo claro de los datos que te devuelve.
codigo_defensa tesis_codigo fecha_defensa calificacion_def estudiante_cedula cedula_jurado
7 RR44354111 2015-05-18 aprobado 10716602 [->] 12357951
7 RR44354111 2015-05-18 aprobado 10716602 [->] 12369874
7 RR44354111 2015-05-18 aprobado 10716602 [->] 12789456
7 RR44354111 2015-05-18 aprobado 10716602 [->] 12856951
7 RR44354111 2015-05-18 aprobado 10716602 [->] 13555555
7 RR44354111 2015-05-18 aprobado 10716602 [->] 18123218
7 RR44354111 2015-05-18 aprobado 10716602 [->] 18123219
7 RR44354111 2015-05-18 aprobado 10716602 [->] 899939

Extrae todas las cédulas que necesito, pero no hay una forma de que no me extraiga nuevamente el código, fecha calificacion y demas?
  #6 (permalink)  
Antiguo 18/05/2015, 15: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: Problema al hacer una consulta de una tabla a otra con clave múltiple.

No, porque eso es lo que no se considera duplicación de datos, como ya te dije.
Es el resultado normal y esperado de un JOIN. lo que hagas para representar ese resultado en pantalla, lo debes hacer programando, y no en SQL.

Si usas MySQL existe la posibilidad de que todos los códigos salgan en un solo campo, separados por comas. Eso sí. P ro no es una forma muy limpia ni correcta de trabajar.
__________________
¿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 18/05/2015, 15:23
 
Fecha de Ingreso: mayo-2015
Mensajes: 7
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Problema al hacer una consulta de una tabla a otra con clave múltiple.

Mmmm ya, muchas gracias amigo. Tu respuesta me ha sido de ayuda.

Etiquetas: clave, compuesta
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 19:18.