SQL SELF JOIN

En SQL, un SELF JOIN correspond à une jointure d’une table avec elle-même. Ce type de requête n’est pas si commun mais très pratique dans le cas où une table lie des informations avec des enregistrements de la même table.

Syntaxe

Pour effectuer un SELF JOIN, la syntaxe de la requête SQL est la suivante:

SELECT `t1`.`nom_colonne1`, `t1`.`nom_colonne2`, `t2`.`nom_colonne1`, `t2`.`nom_colonne2`
FROM `table` as `t1`
LEFT OUTER JOIN `table` as `t2` ON `t2`.`fk_id` = `t1`.`id`

Ici la jointure est effectuée avec un LEFT JOIN, mais il est aussi possible de l’effectuer avec d’autres types de jointures.

Exemple

Un exemple potentiel pourrait être une application d’un intranet d’entreprise qui possède la table des employés avec la hiérarchie entre eux. Les employés peuvent être dirigé par un supérieur direct qui se trouve lui-même dans la table.

Table utilisateur :

idprenomnomemailmanager_id
1SebastienMartins.martin@example.comNULL
2GustaveDuboisg.dubois@example.comNULL
3GeorgetteLeroyg.leroy@example.com1
4GregoryRouxg.roux@example.com2

Les enregistrements de la table ci-dessus montre bien des employés. Les premiers employés n’ont pas de supérieur, tandis que les employés n°3 et n°4 ont respectivement pour supérieur l’employé n°1 et l’employé n°2.

Il est possible de lister sur une même ligne les employés avec leurs supérieurs direct, grâce à une requête telle que celle-ci:

SELECT `u1`.`u_id`, `u1`.`u_nom`, `u2`.`u_id`, `u2`.`u_nom`
FROM `utilisateur` as `u1`
LEFT OUTER JOIN `utilisateur` as `u2` ON `u2`.`u_manager_id` = `u1`.`u_id`

Résultat :

u1_idu1_prenomu1_nomu1_emailu1_manager_idu2_prenomu2_nom
1SebastienMartins.martin@example.comNULLNULLNULL
2GustaveDuboisg.dubois@example.comNULLNULLNULL
3GeorgetteLeroyg.leroy@example.com1SebastienMartin
4GregoryRouxg.roux@example.com2GustaveDubois
Partager