Join List
Le node Join List combine deux listes d'objets sur des propriétés correspondantes, à la manière d'un JOIN SQL, et prend en charge les jointures inner, left, right et full outer.
À quoi sert le node Join List ?
Le node Join List fusionne deux listes d’objets en les faisant correspondre sur une ou plusieurs propriétés partagées, exactement comme une clause JOIN en SQL. C’est l’outil approprié lorsque vous disposez de deux jeux de données liés, provenant de sources différentes, et que vous souhaitez obtenir une seule liste enrichie en sortie.
Cas d’usage typiques :
- Enrichir une liste de contacts CRM avec des données analytiques en faisant correspondre
emailouuser_id. - Combiner une liste de mots-clés issue d’un outil SEO avec des données de classement provenant d’un autre, sur la propriété
keyword. - Croiser un catalogue produit avec des données d’inventaire sur un
skupartagé. - Constituer un rapport consolidé à partir de deux bases Notion partageant une clé.
Configuration rapide
Suivez ces étapes pour ajouter et configurer le node Join List dans votre workflow :
Ajouter le node au canevas
Ouvrez la bibliothèque de nodes (Node Library), naviguez dans Tools > List Operations, puis glissez-déposez le node Join List sur votre espace de travail.
Connecter les deux entrées de listes
Reliez la sortie d’un node (une liste d’objets) à l’entrée List 1, et un second node produisant une liste à l’entrée List 2. Les deux entrées sont obligatoires.
Configurer les conditions de jointure
Ouvrez les paramètres du node. Dans la section Join Conditions, définissez une ligne par propriété de correspondance — pour chaque ligne, saisissez le nom de la clé dans la liste 1 (List 1 property) et le nom de clé correspondant dans la liste 2 (List 2 property). Cliquez sur + Add pour ajouter d’autres conditions ; les conditions multiples sont combinées avec un AND.
Choisir le type de jointure
Sélectionnez Inner Join, Left Join, Right Join ou Full Outer Join selon les éléments sans correspondance que vous souhaitez conserver.
Connecter la sortie
Reliez le port de sortie au node suivant et exploitez les données fusionnées via la sortie joined_list.
Paramètres de configuration
La configuration consiste à indiquer au node sur quelles clés faire correspondre les objets et comment traiter les éléments sans correspondance dans l’autre liste.
Champs requis
Name string required default: Join List Nom du node — Important pour identifier ce node lors de l’exécution et du débogage du workflow (ex : “Associer contacts et commandes”).
Description string required default: Join two lists of objects on matching properties (inner, left, right, full join) Description du node — Une courte phrase décrivant ce que cette jointure fait précisément dans votre pipeline.
List 1 json required Première liste d’entrée — Une liste d’objets passée via le port d’entrée list_1. Accepte un tableau JSON directement, ou une chaîne JSON encodée représentant un tableau.
List 2 json required Seconde liste d’entrée — Une liste d’objets passée via le port d’entrée list_2. Mêmes règles de format que List 1.
Champs optionnels
Join Conditions json default: [{"list1_property": "", "list2_property": ""}] Clés de correspondance — Une ou plusieurs paires de noms de propriétés. Chaque paire relie une clé de List 1 à une clé de List 2. Lorsque plusieurs paires sont définies, toutes doivent correspondre pour que deux objets soient joints (logique AND).
Exemple :
[
{ "list1_property": "keyword", "list2_property": "keyword" },
{ "list1_property": "country", "list2_property": "country_code" }
] Join Type select default: inner Comportement de la jointure — Détermine quelles lignes sans correspondance sont conservées :
- Inner Join (
inner) — uniquement les éléments ayant une correspondance dans les deux listes. - Left Join (
left) — chaque élément deList 1, complété par les données correspondantes deList 2, ounulllorsqu’aucune correspondance n’existe. - Right Join (
right) — chaque élément deList 2, complété par les données correspondantes deList 1, ounulllorsqu’aucune correspondance n’existe. - Full Outer Join (
full) — chaque élément des deux listes, avecnulldu côté sans correspondance.
Les noms de propriétés sont sensibles à la casse et doivent correspondre exactement aux clés de vos objets d’entrée. Si la donnée provient d’une API ou d’un scraper, inspectez d’abord la sortie brute du node amont pour lire les noms de clés réels.
Que renvoie le node ?
Le node renvoie une seule sortie, joined_list : un tableau JSON d’objets fusionnés. Chaque objet fusionné contient toutes les propriétés de l’objet correspondant dans List 1 plus toutes celles de l’objet correspondant dans List 2. Avec les jointures left, right ou full, les propriétés du côté sans correspondance valent null.
joined_list json La liste combinée d’objets. Par exemple :
[
{ "keyword": "seo tools", "volume": 12000, "rank": 3 },
{ "keyword": "keyword research", "volume": 8500, "rank": 7 }
]Référencez-la en aval via {{JoinList_0.joined_list}}.
Exemples d’utilisation
Exemple 1 : Inner join — mots-clés avec classements
Objectif : ne conserver que les mots-clés présents à la fois dans un export Semrush et un export Search Console, avec volume et rank fusionnés sur chaque ligne.
graph LR
A[Semrush: keywords + volume] --> C[Join List]
B[Search Console: keywords + rank] --> C
C --> D[LLM: analyser les top keywords]
Configuration :
Join Conditions:[{"list1_property": "keyword", "list2_property": "keyword"}]Join Type:Inner Join
Résultat : uniquement les mots-clés trouvés dans les deux sources, chacun enrichi de volume et rank.
Exemple 2 : Left join — contacts avec leurs commandes
Objectif : lister chaque contact HubSpot, en y attachant les données de commande lorsqu’elles existent, et en laissant les champs de commande à null pour les contacts sans commande (afin que l’étape suivante puisse les signaler).
graph LR
A[HubSpot: contacts] --> C[Join List]
B[Sheets: commandes] --> C
C --> D[Filter List: sans commandes]
C --> E[LLM: résumé des commandes]
Configuration :
Join Conditions:[{"list1_property": "email", "list2_property": "customer_email"}]Join Type:Left Join
Résultat : chaque contact HubSpot apparaît une fois. Les contacts ayant une commande correspondante portent les champs de commande ; les autres portent null du côté commande.
Exemple 3 : Full outer join — vue complète des produits sur deux systèmes
Objectif : voir chaque produit présent dans un catalogue Notion et un inventaire Sheets, qu’il existe dans l’un, l’autre ou les deux.
graph LR
A[Notion: catalogue produits] --> C[Join List]
B[Sheets: inventaire] --> C
C --> D[Loop]
D --> E[LLM: générer un rapport]
Configuration :
Join Conditions:[{"list1_property": "sku", "list2_property": "product_sku"}]Join Type:Full Outer Join
Résultat : chaque produit de l’une ou l’autre source apparaît une fois. Les produits présents dans les deux sources portent les données combinées ; ceux présents dans une seule source portent null du côté manquant.
Problèmes courants
La liste jointe est vide
Cause : aucune paire d’objets ne satisfait les conditions de jointure. Le plus souvent, les noms de propriétés saisis dans Join Conditions ne correspondent pas aux clés réelles des objets d’entrée (une faute de frappe ou une différence de casse suffit).
Solution : inspectez la sortie brute des nodes amont et copiez les noms de clés à l’identique. La correspondance est sensible à la casse (Email ≠ email).
Erreur : 'Join List node: List 1 is not a valid JSON list' (ou List 2)
Cause : la donnée envoyée à list_1 ou list_2 est une chaîne qui ne s’analyse pas comme un tableau JSON.
Solution : vérifiez que le node amont émet bien un tableau d’objets. S’il émet une chaîne JSON entourée de caractères parasites (clôtures Markdown, prose), insérez un node Find and Replace ou JSON Path Extractor en amont pour la nettoyer.
Doublons inattendus dans la sortie
Cause : plusieurs objets d’une liste correspondent au même objet de l’autre liste. Le node émet une ligne fusionnée par correspondance, exactement comme une jointure SQL.
Solution : ce comportement est attendu. Ajoutez un node Remove Duplicates ou Filter List après la jointure si vous avez besoin d’un jeu de résultats unique.
Champs manquants là où j'attendais des null
Cause : avec left, right ou full, les propriétés du côté sans correspondance sont renvoyées à null. Les nodes en aval qui attendent une chaîne peuvent se comporter de manière inattendue.
Solution : ajoutez un node Conditional ou Filter List juste après Join List pour brancher sur null, ou convertissez null en valeur par défaut avant de consommer la donnée.
Bonnes pratiques
Choisissez le type de jointure qui correspond à votre intention : inner pour ne garder que les intersections, left lorsque la première liste est votre référentiel principal et que vous souhaitez l’enrichir, full lorsque vous avez besoin d’une vue complète des deux sources côte à côte.
Attention aux jointures plusieurs-à-plusieurs : si les deux listes contiennent plusieurs objets partageant la même clé, la taille de la sortie est le produit, pas la somme. Dédupliquez ou agrégez en amont si ce n’est pas le résultat voulu.
Nodes complémentaires
Concaténer deux listes bout à bout sans correspondance sur une clé.
Éliminer les lignes contenant des valeurs null après une jointure left, right ou full.
Nettoyer les doublons plusieurs-à-plusieurs produits par une jointure.
Extraire un tableau propre d’une charge utile amont bruyante avant de la passer à Join List.