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

problema para unir tablas

Estas en el tema de problema para unir tablas en el foro de Mysql en Foros del Web. Hola amigos, Estoy trabajando en un sistema que me han asignado y me he topado con un serio problema, pues me han dado ciertas tablas ...
  #1 (permalink)  
Antiguo 09/03/2012, 16:05
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
problema para unir tablas

Hola amigos,

Estoy trabajando en un sistema que me han asignado y me he topado con un serio problema, pues me han dado ciertas tablas y una consulta que hacer pero por mas inner join que le he aplicado no le encuentro.
Les voy a plantear primero las tablas con sus campos (los campos de los dejos entre paréntesis) y un ejemplo sobre los registros que tiene para plantearles la situación:


Tabla: Criterios (criterio)
Código HTML:
Ver original
  1. orden
  2. presentacion
  3. seguridad
  4. claridad
  5. eficiencia

Tabla: Secciones (id_seccion,seccion)
Código HTML:
Ver original
  1. 1 Analisis
  2. 2 Diseño
  3. 3 Arquitentura
Tabla: Secciones_criterios (id_seccion,criterio,calificacion)
Código HTML:
Ver original
  1. 1   orden           10
  2. 1   presentacion        10
  3. 1   seguridad               10
  4. 1   claridad                10
  5. 1   eficiencia              10
  6. 2   orden           9
  7. 2   presentacion        10
  8. 2   seguridad               10
  9. 2   claridad                10
  10. 2   eficiencia              10
  11. 3   orden           9
  12. 3   presentacion        8
  13. 3   seguridad               7
  14. 3   claridad                8
  15. 3   eficiencia              9



Lo que necesito es una consulta que devuelva todas las secciones cuyos criterios sean igual a 10, en ejemplo anterior solamente debería de devolver análisis, la sección diseño debería de ser descartada pues si leen en los registros de la tabla Secciones_criterios en el criterio orden tiene 9 y para que se muestre debería de tener 10.
La sección arquitectura queda descartada completamente.
Solamente se requiere aquellas secciones en las que todos sus criterios posean 10.

No les dejo consultas pues todas las formas que he probado no me funciona ni una.

Espero que me ayuden por favor,

Saludos
  #2 (permalink)  
Antiguo 09/03/2012, 16:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: problema para unir tablas

hola nh2006:

Este tipo de consultas lo hemos discutido muchas veces en el foro, ya que es bastante usual. Hay muchas formas de atacar el problema, una forma sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT S.* FROM Secciones S INNER JOIN
  2.     ->  (SELECT id_seccion
  3.     ->  FROM Secciones_criterios
  4.     ->  WHERE calificacion = 10
  5.     ->  GROUP BY id_seccion
  6.     ->  HAVING COUNT(DISTINCT criterio) =
  7.     ->  (SELECT COUNT(criterio) FROM criterios)) T
  8.     ->  ON T.id_seccion = S.id_seccion;
  9. +------------+----------+
  10. | id_seccion | seccion  |
  11. +------------+----------+
  12. |          1 | Analisis |
  13. +------------+----------+
  14. 1 row in set (0.14 sec)

La idea es contar cuantos registros distintos existen con una calificación de 10 para cada seccion.

Si ejecutas la subconsulta sola regresaría algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT id_seccion, COUNT(DISTINCT criterio)
  2.     ->  FROM Secciones_criterios
  3.     ->  WHERE calificacion = 10
  4.     ->  GROUP BY id_seccion;
  5. +------------+--------------------------+
  6. | id_seccion | COUNT(DISTINCT criterio) |
  7. +------------+--------------------------+
  8. |          1 |                        5 |
  9. |          2 |                        4 |
  10. +------------+--------------------------+
  11. 2 rows in set (0.00 sec)

Dado que quieres que se cumpla que TODOS LOS CRITERIOS sean calificados con 10 sólo tienes que utilizar la función HAVING para filtrar.

Saludos
Leo.
  #3 (permalink)  
Antiguo 09/03/2012, 19:02
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: problema para unir tablas

Hola leonardo_josue,

Ante todo agradecerte mucho el tiempo dedicado a pasarlo a la base de datos para realizar las pruebas, y luego agradecerte mas por la consulta, sinceramente me pasé toda la tarde buscándoles lado y no le encontraba.

Me has salvado día.

Cordial saludo

Etiquetas: join, registros, tabla, tablas, campos
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 20:08.