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

Diferencia entre Subconsulta y JOIN

Estas en el tema de Diferencia entre Subconsulta y JOIN en el foro de Mysql en Foros del Web. Hola a todos! Tengo algo que no me es del todo claro! Tengo una consulta SQL que se ejecuta de la siguiente forma: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 22/09/2011, 17:16
Avatar de WinGFX  
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 86
Antigüedad: 17 años, 11 meses
Puntos: 3
Pregunta Diferencia entre Subconsulta y JOIN

Hola a todos!

Tengo algo que no me es del todo claro!

Tengo una consulta SQL que se ejecuta de la siguiente forma:

Código MySQL:
Ver original
  1. (SELECT elem FROM tabla_b WHERE id=tabla_a.id) AS item1,
  2. (SELECT elem FROM tabla_c WHERE id=tabla_a.id) AS item2,
  3. (SELECT elem FROM tabla_d WHERE id=tabla_a.id) AS item3,
  4. (SELECT elem FROM tabla_e WHERE id=tabla_a.id) AS item4,
  5. (SELECT elem FROM tabla_f WHERE id=tabla_a.id) AS item5
  6. FROM tabla_a WHERE id=1

Yo quiero saber si este tipo de consulta es correcto hacerla de esa manera o utilizar JOIN ya que no tengo la claridad de saber cual es la manera de hacer optima dicha consulta.

Agradezco cualquier ayuda!
__________________
"Si piensas en que harás mañana, mejor hazlo hoy!"

Consejos para las buenas preguntas

Última edición por WinGFX; 22/09/2011 a las 17:28
  #2 (permalink)  
Antiguo 23/09/2011, 07:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Diferencia entre Subconsulta y JOIN

Dinos cuál es la estructura de la tabla, qué tipo de datos tienes con ejemplos y qué quieres obtener. Si quieres obtener los id de todas las otras tablas coincidentes con el id de la tabla a, puedes hacer una consulta UNION ALL entre todas las demás tablas con la tabla_a con INNER JOIN:
(SELECT tabla_b.elem elemento, "b" tabla FROM tabla_b INNER JOIN tabla_a ON tabla_b.id = tabla_a.id WHERE tabla_a.id=1)
UNION ALL
(SELECT tabla_c.elem "c" tablaFROM tabla_c INNER JOIN tabla_a ON tabla_c.id = tabla_a.id WHERE tabla_a.id=1)
UNION ALL
(SELECT tabla_d.elem "d" tabla FROM tabla_d INNER JOIN tabla_a ON tabla_d.id = tabla_a.id WHERE tabla_a.id=1)
UNION ALL
(SELECT tabla_e.elem "e" tabla FROM tabla_e INNER JOIN tabla_a ON tabla_e.id = tabla_a.id WHERE tabla_a.id=1)
UNION ALL
(SELECT tabla_f.elem "f" tabla FROM tabla_f INNER JOIN tabla_a ON tabla_f.id = tabla_a.id WHERE tabla_a.id=1)
  #3 (permalink)  
Antiguo 23/09/2011, 18:01
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Diferencia entre Subconsulta y JOIN

No he probado cual es mas optimo, pues cuando se me da un caso como el tuyo uso join casi siempre, mas que nada porque si por cualquier casualidad el campo por el que uno las tablas (en tu caso id) se repite en las tablas de las subconsultas (por ser una clave primeria de mas de un campo, o ser una cadena...etc), las subconsultas te devolveran 2 o mas registros para 1 fila y petara.

Ejemplo:

tabla_a
id 1

tabla_b
id 1 elemento 1
id 1 elemento 2

select id, (select elemento from tabla_b where tabla_a.id = id) from tabla_a where id = 1

Resultado: Catastrofe en la subconsulta (devuelve mas de un campo)

Con el join simplemente haria esto:

1, elemento 1
1, elemento 2

Otra cosa es que pusieras un limit = 1 en las subconsultas...entonces si, pero no tendria en cuenta el elemento 2.

Ya por curiosidad, prueba a hacer un explain a tu consulta y a la misma con join, y mira los resultados a ver cual es mas optima...aunque si no tienes muchos registros apenas habra variacion entre uno u otro.

Un saludo!

Etiquetas: join, subconsulta, subquery
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 16:25.