メイン コンテンツをスキップする

UNNEST句を使う

UNNEST句は、ネスト化された配列のネスト化を解除し、その親配列に結合するために使われます。

UNNESTキーワードの後には、ネスト化された配列を返す式を続ける必要があります。親のFROM句またはUNNEST句で指定された内包配列の子であることが必要です。
FROM parent_expression UNNEST child_expression     

UNNEST句でASキーワードとINDEXキーワードを使用したり、複数の連続するUNNEST句を置いたりできます。

エイリアスのないUNNEST句を1つ以上使う時に、絶対パスがなくクエリーで使用されている識別子はすべて、最後のUNNEST句またはクエリー内の識別子が最後の句の一部ではない場合は、その親の句にある識別子の相対パスとして扱われます。

たとえば次の入力データでは:
{
   "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
                  }
               ]
            }
         ]
      }
   ]
}
UNNEST句を2つ使って、同じレベル上のcustomers配列、orders配列、items配列内にあるデータを取得できます。
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
}
nameという識別子とquantityという識別子は一意であるため、配列エイリアスの先頭に付ける必要はありません。ただし、orders配列とitems配列の両方にidエレメントが含まれるため、エイリアスを使えば、どちらが返されるべきかを指定する必要があります。このクエリーは次の結果を返します:
[
   {
      "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
   }
]

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。