@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.