Mieux comprendre le principe du LATERAL JOIN
Par admin le vendredi 24 septembre 2021, 21:15 - PostgreSQL - Lien permanent
Le LATERAL JOIN
est une extension puissante de la clause JOIN
standard dans PostgreSQL. Contrairement à un JOIN
normal, qui combine les lignes de deux tables en fonction d'une condition de jointure, un LATERAL JOIN
permet de combiner les lignes d'une table avec les résultats d'une requête sur une autre table.
L'objectif du LATERAL JOIN
est d'effectuer une requête sur une table qui peut utiliser des données de la table précédente. Cela peut être utile lorsque vous avez besoin de calculer des agrégats pour chaque ligne d'une table, ou lorsque vous avez besoin de faire une jointure qui dépend des données d'une table précédente.
Voici un exemple simple pour illustrer cela.
Supposons que vous ayez deux tables : une table "employees
" qui contient les informations de base sur chaque employé, et une table "sales
" qui contient les données de vente pour chaque employé. Vous souhaitez obtenir le nombre de ventes pour chaque employé.
Une requête de jointure normale ne suffirait pas, car vous avez besoin d'effectuer une agrégation pour chaque employé. C'est là que le LATERAL JOIN
intervient. Voici comment vous pouvez utiliser le LATERAL JOIN
pour obtenir le nombre de ventes pour chaque employé :
SELECT employees.name, sales.num_sales FROM employees LEFT JOIN LATERAL ( SELECT COUNT(*) AS num_sales FROM sales WHERE sales.employee_id = employees.id ) AS sales ON true;
Dans cet exemple, nous utilisons un LATERAL JOIN
pour exécuter une requête sur la table "sales
" pour chaque employé dans la table "employees
". La requête retourne le nombre de ventes pour chaque employé, qui est ensuite joint à la table "employees
".
Un autre exemple d'utilisation courante du LATERAL JOIN
est lors de l'utilisation de fonctions qui renvoient des ensembles de résultats. Supposons que vous ayez une table "orders
" qui contient des informations sur les commandes, et une fonction "get_items(order_id)
" qui renvoie tous les articles pour une commande donnée. Vous pouvez utiliser un LATERAL JOIN
pour joindre les résultats de la fonction "get_items
" à chaque ligne de la table "orders
".
SELECT * FROM orders LEFT JOIN LATERAL get_items(order_id) AS items ON true;
Ceci renvoie une table contenant toutes les commandes, avec une ligne pour chaque article associé à chaque commande.
En conclusion, le LATERAL JOIN
est un outil puissant et flexible pour effectuer des requêtes complexes dans PostgreSQL. Il vous permet de combiner les résultats d'une requête avec les données d'une autre table, ce qui peut être utile pour calculer des agrégats pour chaque ligne d'une table ou pour effectuer une jointure qui dépend des données d'une table précédente.