Utiliser la clause JOIN - Cloud

Guide de référence de Talend Data Shaping Language

Version
Cloud
Language
Français
Product
Talend Cloud
Module
Data Shaping Language
Content
Création et développement

La clause JOIN est utilisée pour effectuer une jointure sur deux collections, en respectant une condition.

La clause JOIN doit être utilisée après une clause FROM ou UNNEST. Le mot-clé JOIN est suivi de l'identfiant et du mot-clé ON introduisant l'expression à utiliser comme condition :
JOIN identifier ON expression 
La condition doit être une expression simple ou conditionnelle retournant un booléen. Par exemple :
FROM customers AS c
JOIN orders AS o ON c.custid == o.custid

La clause JOIN peut contenir les mots-clés AS et INDEX décrits dans Utiliser la clause FROM.

Par défaut, le mot-clé JOIN effectue une jointure interne, mais vous pouvez spécifier le type de jointure à utiliser :
  • La clause INNER JOIN effectue une jointure uniquement sur les éléments respectant la condition dans les deux collections.
  • La jointure externe à gauche LEFT OUTER JOIN retourne tous les éléments de la collection dans la clause FROM ou UNNEST et effectue une jointure sur les éléments de la collection dans la clause JOIN respectant la condition.
Par exemple, avec l'entrée suivante :
{
    "customers": [
        {
            "custid": "1234",
            "name": "Jack Smith"
        },
        {
            "custid": "5678",
            "name": "Jane Smith"
        },
        {
            "custid": "9874",
            "name": "John Doe"
        }
    ],
    "orders": [
        {
            "orderid": "abc-6511",
            "custid":"1234"
        },
        {
            "orderid": "def-6872",
            "custid":"5678"
        }
    ]
}
La même requête avec un type de jointure différent retourne des résultats différents :
  • La jointure interne INNER JOIN retourne uniquement les client·es associé·es à une commande :
    FROM customers AS c
    INNER JOIN orders AS o ON c.custid == o.custid
    SELECT {
      name,
      orderid
    }
    [
       {
          "name":"Jack Smith",
          "orderid":"abc-6511"
       },
       {
          "name":"Jane Smith",
          "orderid":"def-6872"
       }
    ]
  • La jointure externe à gauche LEFT OUTER JOIN retourne tous les client·es et ignore l'élément orderid lorsqu'aucune commande n'est associée au client ou à la cliente :
    FROM customers AS c
    LEFT OUTER JOIN orders AS o ON c.custid == o.custid
    SELECT {
      name,
      orderid
    }
    [
       {
          "name":"Jack Smith",
          "orderid":"abc-6511"
       },
       {
          "name":"Jane Smith",
          "orderid":"def-6872"
       },
       {
          "name":"John Doe"
       }
    ]
Remarque : Dans cet exemple, les éléments utilisés dans la condition ont le même nom dans les deux collections. Pour éviter les problèmes avec les chemins relatifs, vous devez définir un alias pour chaque collection ou utiliser des chemins absolus pour faire référence à l'élément. Par exemple :
INNER JOIN orders ON input.customers.custid == input.orders.custid