SELF JOIN
Une auto-jointure relie une table à elle-même grâce à deux alias. Elle sert pour les hiérarchies (employé et manager) et pour comparer des lignes d'une même table entre elles.
- auto-jointure
- hiérarchie
- manager
- alias
Syntaxe
SELECT e.col, m.colFROM table eLEFT JOIN table m ON m.id = e.parent_id;Exemple
SELECT e.name AS employe, m.name AS managerFROM employees eLEFT JOIN employees m ON m.id = e.manager_idWHERE e.department_id IN (1, 4)ORDER BY e.id;-- Jeu de données : entreprise-- Résultat attendu :-- Isabelle Renard | NULL-- Sandrine Lopez | Isabelle Renard-- Théo Brun | Sandrine LopezÀ retenir
- Les alias (e pour l'employé, m pour le manager) sont obligatoires : ce sont eux qui distinguent les deux rôles de la même table.
- Piège : avec INNER JOIN, la directrice générale, qui n'a pas de manager (manager_id NULL), disparaît du résultat. LEFT JOIN la conserve.
- Pour former des paires sans doublon (A-B mais pas B-A ni A-A), ajoutez la condition a.id < b.id.
- Une auto-jointure ne remonte qu'un niveau. Pour toute la chaîne hiérarchique, quelle que soit sa profondeur, utilisez une CTE récursive.
Voir aussi
- INNER JOININNER JOIN associe les lignes de deux tables qui se correspondent, en général une clé étrangère et la clé primaire qu'elle référence. Les lignes sans correspondance disparaissent du résultat.
- LEFT JOINLEFT JOIN garde toutes les lignes de la table de gauche, avec ou sans correspondance à droite (les colonnes de droite valent alors NULL). Idéal pour compter des zéros ou repérer des absents.
- CTE récursive (WITH RECURSIVE)Une CTE récursive part d'un point de départ puis se rappelle elle-même pour avancer d'un niveau à chaque tour. Elle parcourt une hiérarchie complète ou génère une suite de dates.