2010-08-24 5 views
2

j'ai les tableaux suivants:Comment puis-je joindre 3 tables en utilisant MySQL

TABLE: companies c 
FIELDS: id, name, description 

TABLE: departments d 
FIELDS: id, name, description 

TABLE employees e 
FIELDS: id, company_id, department_id, name 

J'essaie d'obtenir une liste de tous les employés pour la société 1 et aussi obtenir le nom du département (de d.name) en les résultats de la rangée.

Voilà ma requête originale:

SELECT e.*, c.name as company 
FROM employees e, companies c 
WHERE e.company_id=c.id AND e.company_id=1; 

Que dois-je ajouter à cette requête pour obtenir le nom du département (de d.name) apparaître dans chaque ligne de la requête? En outre ... e.department_id peut être égal à 0 dans certains cas, car il n'y a pas de département pour une entreprise spécifique.

Merci pour l'aide à tous!

Répondre

3
SELECT e.id, e.name, e.department_id, c.name, d.name 
FROM employees AS e 
LEFT JOIN departments AS d ON e.department_id = d.id 
LEFT JOIN companies AS c ON e.company_id = c.id 
WHERE e.company_id = 1; 

En général, vous pouvez mélanger match rejoint dans l'ordre, tant que des colonnes/tables dont vous avez besoin dans une jointure déjà rejoint précédemment. Dans ce cas, vous récupérez des données provenant de deux tables distinctes liées via les données des employés, et aucune d'entre elles n'est co-dépendante. Vous pouvez donc commander les deux lignes LEFT JOIN dans n'importe quel ordre. De plus, avec une jointure GAUCHE, vous obtenez toutes les lignes de la table du côté «gauche» de la jointure (dans ce cas, la table des employés) et les lignes correspondantes (le cas échéant) de la table de droite (entreprises /départements). S'il n'y a pas de lignes correspondantes dans les sociétés ou les départements, les colonnes provenant de ces tables seront NULL dans le jeu de résultats.