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

obtener datos que no están en optra tabla

Estas en el tema de obtener datos que no están en optra tabla en el foro de Mysql en Foros del Web. Hola amigos, Tengo problemas con un select que debe obtener los registros que no están en otra tabla de la unión de 3. Les dejo ...
  #1 (permalink)  
Antiguo 13/03/2012, 08:30
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
obtener datos que no están en optra tabla

Hola amigos,

Tengo problemas con un select que debe obtener los registros que no están en otra tabla de la unión de 3.

Les dejo un esquema para explicarme mejor:

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



La idea es obtener un registro de la tabla Secciones junto con todos los criterios que no reúna

Mi consulta lo tengo así

Código MySQL:
Ver original
  1. select * from Secciones
  2. inner join Secciones_criterios on Secciones.id_seccion=Secciones_criterios.id_seccion
  3. where Secciones_criterios.criterio not in (select criterio from Criterios) and Secciones.id_seccion=3


Esta consulta debería devolver de la tabla secciones el registro (3 Arquitectura) junto con el criterio Eficiencia que el que no está en la tabla Secciones_criterios.

Me pueden hacer el favor de indicarme dónde puede estar mi error?

Gracias desde ya
  #2 (permalink)  
Antiguo 13/03/2012, 09:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: obtener datos que no están en optra tabla

No hay ningun criterio que no este en "SELECT criterio FROM Criterios".

Ahi esta tu error.

Código MySQL:
Ver original
  1. SELECT Criterios.criterio FROM Criterios
  2. WHERE Criterios.criterio NOT IN (SELECT criterio FROM Secciones_criterios
  3. WHERE Secciones.id_seccion=3)

Eso te da los criterios que no tiene la seccion 3, los datos de la seccion yo los sacaria aparte....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 13/03/2012, 17:01
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
Respuesta: obtener datos que no están en optra tabla

Hola quimfv

Gracias por tu valioso aporte, esa era un parte que no lograba hacer y la pensaba unir en una sóla.

asumiendo que el query que publicaste me regrese un valor de "eficiencia".

Pienso que como ya se tiene los criterios que no se reúnen, lo que resta es otro query parecido al siguiente para sacar el resto de la info que hace falta?

Código MySQL:
Ver original
  1. SELECT * FROM Secciones
  2.  INNER JOIN Secciones_criterios on Secciones.id_seccion=Secciones_criterios.id_seccion
  3.     WHERE Secciones.criterio IN ("eficiencia")

Saludos
  #4 (permalink)  
Antiguo 14/03/2012, 01:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: obtener datos que no están en optra tabla

No entiendo lo que buscas....

Esa query te dara los datos de las otras secciones las que SI tienen ese criterio...si es eso lo que quieres si las puedes juntar...


Código MySQL:
Ver original
  1. SELECT * FROM Secciones
  2.  INNER JOIN Secciones_criterios
  3.       ON Secciones.id_seccion=Secciones_criterios.id_seccion
  4.   WHERE Secciones.criterio
  5.            IN (SELECT Criterios.criterio
  6.                  FROM Criterios
  7.                  WHERE Criterios.criterio
  8.                           NOT IN (SELECT criterio
  9.                                              FROM Secciones_criterios
  10.                           WHERE Secciones.id_seccion=3))

así si hay mas de un criterio que NO tiene la sección 3 los tendrá en cuenta todos.

Si lo que quieres es el resto de datos de la seccion 3 simplemente


Código MySQL:
Ver original
  1. SELECT * FROM Secciones
  2.  INNER JOIN Secciones_criterios on Secciones.id_seccion=Secciones_criterios.id_seccion
  3.     WHERE Secciones.id_seccion=3

Otra opción es que quieras que salgan todos los criterios apesar de que no tenga valoración

Código MySQL:
Ver original
  1.      (Criterios LEFT JOIN Secciones_criterios
  2.           on Criterios.criterio=Secciones_criterios.criterio)
  3.      LEFT JOIN Secciones
  4.            on Secciones_criterios.id_seccion=Secciones.id_seccion
  5.     WHERE Secciones.id_seccion=3

Lista TODOS los criterios con la calificacion optenida en la seccion 3 (tenga o no tenga).
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 14/03/2012 a las 06:52
  #5 (permalink)  
Antiguo 14/03/2012, 08:07
 
Fecha de Ingreso: diciembre-2006
Mensajes: 213
Antigüedad: 17 años, 4 meses
Puntos: 3
[Solucionado] Respuesta: obtener datos que no están en optra tabla

Hola quimfv,

Muchas gracias por la ayuda, disculpas sino me dí a entender bien, es la primera query de tu último hilo que publicaste lo que ando buscando.

Saludos

Etiquetas: join, registros, select, tabla
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 05:22.