Dos LEFT JOIN a una misma tabla de Mysql

Tengo dos tablas Mysql llamadas 'Producto' y 'Persona'. Cada producto almacenado en la tabla 'Producto' está asociado a solo un proveedor (o a ninguno) y a un solo cliente (o a ninguno). La información completa tanto de los clientes como de los proveedores se almacena en la tabla 'Persona'. De esta forma, en la tabla 'Producto' dispongo de dos campos INT, llamados 'idCliente' e 'idProveedor' respectivamente, ambos relacionados mediante una FOREIGN KEY hacia la misma tabla 'Persona'.

A la hora de mostrar información de productos me interesa no sólo mostrar el número identificativo de cada proveedor y de cada cliente asociados a un producto ('idProveedor' e 'idCliente'), si no que, por ejemplo, deseo mostrar nombre y apellidos de éstos. Al realizar la consulta SQL necesito crear dos LEFT JOIN puesto que, como se ha comentado anteriormente, en ocasiones puede ser que no tengamos cliente y/o proveedor asociados al producto.

El problema que tenía es que los dos LEFT JOIN deben referirse hacia la misma tabla ('Persona') y surge la necesidad de diferenciarlos de alguna forma. La solución es la siguiente:

SQL:
  1. SELECT Concat(Cliente.nombre,' ',Clienteapellidos) AS 'cliente', Concat(Proveedor.nombre,' ',Proveedor.apellidos) AS 'proveedor'
  2.  
  3. FROM  Producto
  4.  
  5. LEFT JOIN Persona Cliente (Cliente.idPersona = Producto.idCliente)
  6.  
  7. LEFT JOIN Persona Proveedor (Proveedor.idPersona = Producto.idProveedor)
  8.  
  9. WHERE 1

Como se puede observar en el ejemplo, el único requisito exigible para conseguir el objetivo expuesto es poner un alias justo detrás del nombre de la tabla en la sentencia LEFT JOIN.

Etiquetas: , ,

Un comentario para “Dos LEFT JOIN a una misma tabla de Mysql”

  1. Carlos dice:

    ¡¡Muy buen artículo y muy útil!!. Me ha servido para solucionar los problemas que tenía que eran muy similares.

    Muchas gracias por compartir estos conocimientos.

    Un saludo.

Deja un comentario

CAPTCHA Image Audio Version
Reload Image