Múltiple INNER JOIN – MySQL vs MS SQL

MySQL tiene una sintaxis bastante flexible comparada con MS SQL al momento de hacer JOINs. En MySQL puedes hacer un JOIN de dos maneras, sin embargo, sería conveniente hacerlo de la forma de MS SQL de manera de que el código sea más portable.

En MySQL pudes hacer un múltiple JOIN (JOIN entre varias tablas) de la siguiente manera:

SELECT  *
FROM    tabla1
    INNER JOIN tabla2 ON tabla1.id=tabla2.id
    INNER JOIN tabla3 ON tabla2.id2=tabla3.id2


En esta consulta, los JOINS son ejecutados secuencialmente, primero se hacer el primer JOIN, cuando está listo se hace el siguiente, luego el siguiente y así sucesivamente.

En MS SQL, la sintaxis para el múltiple JOIN necesita hacerse de la siguiente forma (también soportada por MySQL):

SELECT  *
FROM    tabla1
INNER JOIN
    (tabla2 INNER JOIN tabla3 ON tabla2.id2=table3.id2)
    ON tabla1.id=tabla2.id


En esta consulta, los JOINs son ejecutados de adentro hacia afuera. Primero se ejecuta el JOIN entre paréntesis más internos, luego el siguiente fuera de los paréntesis, luego el siguiente y así sucesivamente.

Vía: VXT

24 comentario en este artículoDeje el suyo
  1. claro y conciso,, se agradece.

    un saludo

  2. Exelente resumen me ayudo mucho
    Gracias :)

  3. Gracias por los comentarios.

    Saludos.

  4. Ammm… dentro de la consulta de la tabla2 y tabla3, creo que se le paso por alto al compañero la relación:

    (tabla2 INNER JOIN tabla3 ON tabla2.id2=table2.id2)

    no es?:

    (tabla2 INNER JOIN tabla3 ON tabla2.id2=table3.id2)

    Saludos.

  5. Es correcto lo que dices, se me ha pasado por alto :-(

    Ya lo he corregido.

    Muchas gracias por el comentario y la aclaración.

  6. Hola y con diferentes BD como sería?? gracias.

  7. El inner join de mssql deberia ser asi:

    SELECT *
    FROM tabla1 as t1
    INNER JOIN tabla2 as t2
    on t1.id1=t2.id1
    INNER JOIN tabla3 as t3
    ON t2.id2=t3.id2

    y asi todos los q quieras..

    Es mas eficiente ya que de la forma que lo haces realiza una subconsulta como tabla derivada y eso lo hace mas pesado para el motor.

    Me encanta mysql ya q ofrece la posibilidad de ser usado en forma gratuita, pero no confundan en las prestaciones de una y otra herramieta…

  8. Hola, no he logrado hacer la consulta. he intentado de varias manera y no doy pié con bola.
    Estas son las tablas que tengo:

    Tabla1: user
    Campo 1: id
    Campo 2: Nick
    Campo3: email
    Campo4: password

    Tabla2: comentarios
    Campo1: Id
    Campo2: id_user
    Campo3: titulo
    Campo4: texto_comentario

    Tabla3: respuestas
    Campo1: Id
    Campo2: id_coment
    Campo3: respuestas

    Quiero unir-> user.id con comentarios.id_user y a su vez comentarios.Id con respuestas.id_coment

    La consulta que he creado es:

    $query_foro = sprintf(“SELECT user.*, comentarios.*, respuestas.* FROM (user INNER JOIN comentarios ON user.id=comentarios.id_user) INNER JOIN respuestas ON respuestas.id_coment=comentarios.Id “);

    No puedo hacer una tabla dinamica en Dreamweaver ya que no me reconoce la consulta, sin embargo hago una vista previa en el explorer y no hay error.

  9. Gracias por la aportacion ahora he podido realizar la consulta de 7 tablas relacionadas entre si.

    Saludos.

  10. es una explicacion precisa y concreta te ayuda y aclara tus dudas

  11. Yo Tambien deseo hacer lo mismo que Alex

    Tabla1: user
    Campo 1: id
    Campo 2: Nick
    Campo3: email
    Campo4: password

    Tabla2: comentarios
    Campo1: Id
    Campo2: id_user
    Campo3: titulo
    Campo4: texto_comentario

    Tabla3: respuestas
    Campo1: Id
    Campo2: id_coment
    Campo3: respuestas

    Quiero unir-> user.id con comentarios.id_user y a su vez comentarios.Id con respuestas.id_coment

    La consulta que he creado es:

    $query_foro = sprintf(“SELECT user.*, comentarios.*, respuestas.* FROM (user INNER JOIN comentarios ON user.id=comentarios.id_user) INNER JOIN respuestas ON respuestas.id_coment=comentarios.Id “);

    No puedo hacer una tabla dinamica en Dreamweaver ya que no me reconoce la consulta, sin embargo hago una vista previa en el explorer y no hay error.

    AYUDA!!! Help!!

  12. graciaaaaaaaaaaasssssssssssssss me salvo de una regrande

  13. excelente me ayudo!!!.

    Saludos desde Perú

  14. Muchas gracias, realmente más sencillo que el mismo manual oficial :D
    SaludOS

  15. hey man te lo agradezco he buscado mucho ese codigo lo rekeria urgente para un trabajo final se agradece el wen aporte…… seria xvr tener material asi siempre

  16. Estimados.
    Yo tengo un problema parecido, que no lo puedo solucionar, les agradecería si me pudieran orientar. Tengo tabla Turno (Id, Fecha, Hora, Id_User) una tabla Usuarios (Id_User, Apellido, Nombre,etc), necesito mostra los siguientes campos Turno.Fecha, Turno.Hora, Turno.Id_User, Usuario.Apellido, Usuario.Nombre para una fecha determinada, y que me muestre tambien las horas que no tengan asignado un Id_User.

    Desde ya les agradezco cualquier ayuda.

  17. Muchas gracias me sirvio bastante, saludos.

  18. muy claro ! gracias …@poqueria gracias por el aporte

  19. me parece que esta es mejor :D

    SELECT P.idPersonal,P.Nombres,P.Apellidos,P.idCargo, C.Nombre
    from personal P INNER JOIN Cargo C ON P.idCargo= C.idCargo;

    la insercion es asi pero si gustan la optimizan con procedimiento almacenado

    insert into `bdtransporte`.`personal`(Nombres, Apellidos, Email,Dni,Usuario,Contraseña,idCargo)
    values(‘luis’, ‘caceres’, ‘luis_caceres@hotmail.com’, ’45184545′, ‘luis’, ’123′, 1);

  20. Capo Luis. De toda la basura que encontre en internet tu respuesta fue la mas acertada y funcionó de maravilla.

    Gran capo Luis.

  21. Tambien yo tengo el mismo error pongan mas ejemplos

  22. EN SqlServer 2008 lo puedes hacer exactamente como lo haces con MYSQL

  23. Muchas gracias por el aporte!!!

  24. gracias, me fue de mucha ayuda

Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2012

WordPress