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

Realizar una Doble Condicion dentro de un Inner Join

Estas en el tema de Realizar una Doble Condicion dentro de un Inner Join en el foro de SQL Server en Foros del Web. Hola. Quiero saber como puedo filtrar un valor usando Inner Join, actualmente tengo el siguiente problema Tengo dos tablas. 'Posts' y 'FieldsPosts'. Dentro de FieldsPosts ...
  #1 (permalink)  
Antiguo 01/11/2015, 20:53
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Exclamación Realizar una Doble Condicion dentro de un Inner Join

Hola. Quiero saber como puedo filtrar un valor usando Inner Join, actualmente tengo el siguiente problema

Tengo dos tablas. 'Posts' y 'FieldsPosts'.

Dentro de FieldsPosts tengo relacionado el ID del Post bajo la columna post_id y una columna que se llama Value.

Quiero filtrar los datos de varios values como por ejemplo Value=1 y Value=5 si la condicion se cumple me debe mostrar el post, en caso contrario no deberia arrojar ningun dato.


Tengo la siguiente sintaxis

Código SQL:
Ver original
  1. SELECT
  2. *
  3. FROM
  4.   posts Posts
  5.  
  6. INNER JOIN fields_posts FieldsPosts ON (
  7.     Posts.id = (FieldsPosts.post_id)
  8.     AND (
  9.       (
  10.        VALUE = 1
  11.       )
  12.       AND (
  13.         VALUE = 5
  14.       )
  15.    
  16.     )
  17.   )
  18. WHERE
  19.   (
  20.     Posts.STATUS = 'active'
  21.     AND Posts.TYPE = 'Post'
  22.   )
  23. GROUP BY
  24.   Posts.id

Si utilizo la condicion OR SQL me trae todos los datos tanto Value 1 como Value 5 pero si pongo la condicion AND no me arroja ningun dato.

Última edición por gnzsoloyo; 02/11/2015 a las 12:22
  #2 (permalink)  
Antiguo 02/11/2015, 12:14
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Realizar una Doble Condicion dentro de un Inner Join

Con "And" lógicamente no obtenés ningún dato porque el ID no puede ser 1 y 5 en el mismo tiempo.
¿Cuál es el problema con "Or"?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 02/11/2015, 12:20
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: Realizar una Doble Condicion dentro de un Inner Join

Simplificando...
Código SQL:
Ver original
  1. SELECT  *
  2. FROM  posts p
  3.      INNER JOIN fields_posts fp ON
  4.     p.id = fp.post_id
  5.     AND (VALUE = 1 OR VALUE = 5)
  6. WHERE
  7.     p.STATUS = 'active'
  8.     AND p.TYPE = 'Post'
  9. GROUP BY  p.id

Como dice GeriReshef, ¿cuál es el problema de esto?
Eso, mas allá de que te debe estar disparando un error por el GROUP BY...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 02/11/2015, 16:40
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Realizar una Doble Condicion dentro de un Inner Join

Gracias, Necesito traer el resultado de un filtro que realice., Es decir quiero saber cuales son los post que cumplen con la condición de una tabla externa como por ejemplo traer todos los posts que tengan un value de 5 y 1 si no cumple con este resultado no debe traer ningún dato pero si lo cumple debe aparecer la informacion de la tabla post.
  #5 (permalink)  
Antiguo 02/11/2015, 18:53
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: Realizar una Doble Condicion dentro de un Inner Join

No se entiende.
Ejemplifica lo que tienes, lo que obtienes con la consulta, y qué es lo que según tu, deberías obtener.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 02/11/2015, 19:38
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Realizar una Doble Condicion dentro de un Inner Join

Mira tengo 10 posts cada uno de ello tiene varias variables que están relacionadas en la tabla fields_posts.


Necesito hacer un filtro de acuerdo a sus variables registradas en fields_posts. En este caso quiero llamar todos los posts que cumplan con el value 1 y value 5 las cuales estan registradas en fields_posts.


Según eso si lo manejo con Inner Join con el OR me trae tanto los posts que tiene 1 como los que tienen 5 pero mi busqueda tiene que ser filtrada por la Condicion AND ya que necesito que tenga el value 1 como el value 5 obligatoriamente
  #7 (permalink)  
Antiguo 05/11/2015, 13:01
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Realizar una Doble Condicion dentro de un Inner Join

Ya encontré la solución y se debe agrupar los resultados con HAVING
Código SQL:
Ver original
  1. FROM
  2.   posts Posts
  3.   INNER JOIN fields_posts FieldsPosts ON (
  4.     FieldsPosts.VALUE IN ('1', '5')
  5.     AND Posts.id = (FieldsPosts.post_id)
  6.   )
  7. WHERE
  8.   (
  9.     Posts.STATUS = 'active'
  10.     AND Posts.TYPE = 'Post'
  11.   )
  12. GROUP BY
  13.   Posts.id
  14. HAVING
  15.   COUNT(DISTINCT FieldsPosts.VALUE) = 2

Última edición por gnzsoloyo; 05/11/2015 a las 13:53

Etiquetas: sql
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 13:12.