Aller au contenu | Aller au menu | Aller à la recherche

Mieux comprendre le principe du LATERAL JOIN

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.

La discussion continue ailleurs

URL de rétrolien : https://www.footcow.com/index.php?trackback/42

Fil des commentaires de ce billet