Ouvrir le Studio

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.

Node Join List fusionnant plusieurs listes texte pour une sortie unique

À 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 email ou user_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 sku partagé.
  • 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

Paramètres Join List avec délimiteur politique chevauchement et nommage

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 de List 1, complété par les données correspondantes de List 2, ou null lorsqu’aucune correspondance n’existe.
  • Right Join (right) — chaque élément de List 2, complété par les données correspondantes de List 1, ou null lorsqu’aucune correspondance n’existe.
  • Full Outer Join (full) — chaque élément des deux listes, avec null du côté sans correspondance.
Tip

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 (Emailemail).

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

Tip

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.

Warning

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