@WHEREディレクティブ

より大きなデータセットから特定の情報をフィルタリングするには@WHEREディレクティブを使用します。

このディレクティブは2つの引数を受け取ります:
  • 引数SQL。述語のSQL式を指定できます。
  • オプションの引数CHECK。値はTRUE(デフォルト)またはFALSEです。CHECKパラメータを設定すると、ビューはWITH CHECK OPTIONで作成されます。

ノート:

引数CHECKは二面性ビューにのみ適用可能で、表関数では使用できません。

構文:

@WHERE(sql:"SQL EXPRESSION", check:[TRUE|FALSE])

driver表から、平均pointsより高いpointsを獲得しているドライバを選択する例:

SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    driver @where(sql: "points >= (select avg(points) from driver)") {
        id: driver_id
        name
        points
    }
');
これにより、平均より上のドライバを一覧表示した出力が生成されます:
DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "id" : 101,                                                                  
  "name" : "Lando Norris",                                                     
  "points" : 282                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 102,                                                                  
  "name" : "Oscar Piastri",                                                    
  "points" : 384                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 103,                                                                  
  "name" : "Charles Leclerc",                                                  
  "points" : 312                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 104,                                                                  
  "name" : "Carlos Sainz Jr.",                                                 
  "points" : 340                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 105,                                                                  
  "name" : "Max Verstappen",                                                   
  "points" : 456                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 106,                                                                  
  "name" : "Sergio P??rez",                                                    
  "points" : 133                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 107,                                                                  
  "name" : "Lewis Hamilton",                                                   
  "points" : 240                                                               
}                                                                              
                                                                                 
{                                                                              
  "id" : 108,                                                                  
  "name" : "George Russell",                                                   
  "points" : 228                                                               
}                                                                              
                                                                                 
 
8 rows selected.

「Max Verstappen」が勝者であるレースを選択できる別の例を次に示します:

SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    driver_race_map @where(sql: "driver_id = (select driver_id from driver where name = ''Max Verstappen'') and position = 1") {
        race @unnest {
            race: name
        }
        position
    }
'); 

この問合せは、ドライバの名前が「Max Verstappen」であるレースを検索し、1位で終了したすべてのレースを返します。

DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "race" : "Bahrain Grand Prix",                                               
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Saudi Arabian Grand Prix",                                         
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Japanese Grand Prix",                                              
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Chinese Grand Prix",                                               
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Emilia Romagna Grand Prix",                                        
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Canadian Grand Prix",                                              
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Spanish Grand Prix",                                               
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "S??o Paulo Grand Prix",                                            
  "position" : 1                                                               
}                                                                              
                                                                                 
{                                                                              
  "race" : "Qatar Grand Prix",                                                 
  "position" : 1                                                               
}                                                                              
                                                                                 
 
9 rows selected.