@NESTおよび@UNNESTディレクティブ
@nestおよび@unnestディレクティブは、表関数および二面性ビュー定義の中間オブジェクトのネストとネスト解除(フラット化)を指定します。
@unnestディレクティブは、SQLキーワードUNNESTに対応しています(SQLには、@nestディレクティブに対応するキーワードNESTはありません)。これらの2つのディレクティブを使用する場合の制限事項は次のとおりです:
-
別名を持つフィールドのネストは解除できません。
-
二面性ビューに使用する場合、ルート表の識別列(主キー列、ID列、または一意制約または一意索引がある列)に対応するフィールドをネストすることはできません。
次のコードを使用すると、driversオブジェクト内のチームの詳細をネスト解除できます:
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
driver {
driverId: driver_id
driverName: name
driverPoints: points
team @unnest {
teamId: team_id
teamName: name
teamPoints: points
}
}
');このコードは、次の出力結果を戻します。
DATA
--------------------------------------------------------------------------------
{
"driverId" : 101,
"driverName" : "Lando Norris",
"driverPoints" : 282,
"teamId" : 301,
"teamName" : "McLaren Mercedes",
"teamPoints" : 666
}
{
"driverId" : 102,
"driverName" : "Oscar Piastri",
"driverPoints" : 384,
"teamId" : 301,
"teamName" : "McLaren Mercedes",
"teamPoints" : 666
}
{
"driverId" : 103,
"driverName" : "Charles Leclerc",
"driverPoints" : 312,
"teamId" : 302,
"teamName" : "Ferrari",
"teamPoints" : 652
}
...................................
...................................
...................................
20 rows selected.次のコードは、
@nestディレクティブの使用方法を示しており、前の問合せのチームのポイントをネストできます:SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
driver {
driverId: driver_id
driverName: name
driverPoints: points
team @unnest {
teamId: team_id
teamName: name
teamPoints @nest {
points
}
}
}
');次の出力ではpointsフィールドがネストされています:
DATA
--------------------------------------------------------------------------------
{
"driverId" : 101,
"driverName" : "Lando Norris",
"driverPoints" : 282,
"teamId" : 301,
"teamName" : "McLaren Mercedes",
"teamPoints" :
{
"points" : 666
}
}
{
"driverId" : 102,
"driverName" : "Oscar Piastri",
"driverPoints" : 384,
"teamId" : 301,
"teamName" : "McLaren Mercedes",
"teamPoints" :
{
"points" : 666
}
}
....................................
....................................
....................................
20 rows selected.
JSONリレーショナル二面性ビューの作成で@unnestディレクティブを使用する詳細な例は、ここにあります。