@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ディレクティブを使用する詳細な例は、ここにあります。