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

subselect en subselect

Estas en el tema de subselect en subselect en el foro de Mysql en Foros del Web. saludos cordiales, intento hacer algo así : Código: select campo1 from tabla1 where (select campo2 from tabla2 where tabla2.campo1=tabla1.campo1) in (select campo2 from tabla3 where ...
  #1 (permalink)  
Antiguo 22/09/2009, 09:05
 
Fecha de Ingreso: julio-2007
Mensajes: 239
Antigüedad: 16 años, 9 meses
Puntos: 2
subselect en subselect

saludos cordiales,

intento hacer algo así :

Código:
select campo1 from tabla1 
  where 
    (select campo2 from tabla2 where tabla2.campo1=tabla1.campo1) 
    in 
    (select campo2 from tabla3 where tabla3.campo1=tabla1.campo1)
es decir que alguno de los valores de la tabla2 (concernientes a tabla1) se encuentra en alguno de los valores de tabla3 (concernientes a tabla1)

el "in" (any y demás operadores) se limitan a un único valor comparado con varios y no se me ocurre nada para lograr comprar varios valores en varios

¿alguna sugerencia?
  #2 (permalink)  
Antiguo 22/09/2009, 09:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: subselect en subselect

Prueba algo así:

Código sql:
Ver original
  1. SELECT campo1 FROM tabla1 INNER JOIN tabla2
  2. ON tabla2.campo1=tabla1.campo1 WHERE
  3. tabla2.campo2 IN(SELECT campo2 FROM tabla3)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/09/2009, 09:36
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, 5 meses
Puntos: 2658
Respuesta: subselect en subselect

¿No sería lo mismo que hacer:
Código sql:
Ver original
  1. SELECT campo1
  2. FROM tabla1
  3.           INNER JOIN tabla2 ON tabla1.campo1=tabla2.campo1
  4.           INNER JOIN tabla3 ON tabla2.campo1=tabla3.campo1;

Pez_del_Web: Podrías explicarte mejor esto:
Cita:
el "in" (any y demás operadores) se limitan a un único valor comparado con varios y no se me ocurre nada para lograr comprar varios valores en varios
Porque el ejemplo del primer post sólo concierne a un sólo valor entre tres tablas.
__________________
¿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 22/09/2009, 10:24
 
Fecha de Ingreso: julio-2007
Mensajes: 239
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: subselect en subselect

antes que nada muchas gracias, la consulta es tan larga que me había liado/atascado

referido a lo del doble inner supongo que el segundo inner podría reemplazar al IN sin problemas aunque devolverá un registro por cada coincidencia, en el caso del IN si no me equivoco solamente lo comprueba y devuelve 1 registro en caso de coincidir con varios
  #5 (permalink)  
Antiguo 22/09/2009, 10:33
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, 5 meses
Puntos: 2658
Respuesta: subselect en subselect

En el caso del IN, como es una subconsulta, realizará esa comprobación con cada uno de los resultados del INNER JOIN inicial.
Si lo que quieres es que devuelva un solo registro por cada valor, deberías poner un DISTINCT 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)
  #6 (permalink)  
Antiguo 22/09/2009, 10:45
 
Fecha de Ingreso: julio-2007
Mensajes: 239
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: subselect en subselect

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En el caso del IN, como es una subconsulta, realizará esa comprobación con cada uno de los resultados del INNER JOIN inicial.

Si lo que quieres es que devuelva un solo registro por cada valor, deberías poner un DISTINCT en el SELECT.
cierto, muchas gracias
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 23:45.