Accéder au contenu principal

Utiliser la clause UNNEST

La clause UNNEST est utilisée pour désimbriquer un tableau imbriqué et effectuer une jointure entre elle et son tableau parent.

Le mot-clé UNNEST doit être suivi de l'expression retournant le tableau imbriqué. Il doit être un enfant du tableau imbriquant spécifié dans la clause FROM ou UNNEST parente :
FROM parent_expression UNNEST child_expression     

Vous pouvez utiliser les mots-clés AS et INDEX dans la clause UNNEST. Vous pouvez également avoir plusieurs clauses UNNEST consécutives.

Lors de l'utilisation d'une ou de plusieurs clause·s UNNEST sans alias, tous les identifiants utilisés dans la requête sans chemin absolu sont traités comme étant relatifs à l'identifiant dans la dernière clause UNNEST ou à sa clause parente si un identifiant dans la requête ne fait pas partie de la dernière clause.

Par exemple, avec les données d'entrée suivantes :
{
   "customers":[
      {
         "name":"John Smith",
         "orders":[
            {
               "id":"abc-12345",
               "items":[
                  {
                     "id":"97516848-jiargn",
                     "quantity":2
                  }
               ]
            }
         ]
      },
      {
         "name":"Jane Doe",
         "orders":[
            {
               "id":"def-12345",
               "items":[
                  {
                     "id":"97516848-kftesn",
                     "quantity":3
                  },
                  {
                     "id":"96946848-metasb",
                     "quantity":1
                  }
               ]
            }
         ]
      }
   ]
}
Vous pouvez utiliser deux clauses UNNEST pour obtenir les données dans les tableaux customers, orders et items au même niveau :
FROM customers UNNEST orders AS o UNNEST items AS i
SELECT {
	customer_name = name,
	order_id = o.id,
	item_id = i.id,
	item_quantity = quantity
}
Comme les identifiants name et quantity sont uniques, il n'est pas nécessaire qu'ils contiennent un préfixe avec l'alias du tableau. Cependant, comme les deux tableaux orders et items contiennent un élément id, vous devez utiliser l'alias pour spécifier lequel doit être retourné. Cette requête retourne le résultat suivant :
[
   {
      "customer_name":"John Smith",
      "order_id":"abc-12345",
      "item_id":"97516848-jiargn",
      "item_quantity":2
   },
   {
      "customer_name":"Jane Doe",
      "order_id":"def-12345",
      "item_id":"97516848-kftesn",
      "item_quantity":3
   },
   {
      "customer_name":"Jane Doe",
      "order_id":"def-12345",
      "item_id":"96946848-metasb",
      "item_quantity":1
   }
]

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !