FROM句を文に含めてレコードのソースを指定する必要があります。
FROM句は文に必須で、状態名や定義済文などのEQL文のレコードのソースを指定します。
FROMの構文は次のとおりです。
FROM <recSource> [alias]
ここで、
<recSource>には次のものを指定できます。
- 定義済文の名前(文は、DEFINEまたはRETURNのいずれかです)。
- 状態名。FROMはコレクション名を直接にはサポートしていませんが、状態にコレクション名が含まれるため、実質的にはサポートしています。
- JOINまたはCROSS JOIN。
問合せでFROM句を省略すると、EQLパーサーによってエラーが返されます。
定義済文
別の文の結果をレコード・ソースとして使用できます。次に示す例では、最初の文(
RepQuartersを指定)で販売トランザクションの総数を、四半期および販売員ごとに計算しています。次に販売員ごとの平均トランザクション数を計算するために、後続の文(
Quartersを指定)でこの結果を四半期ごとにグルーピングします。
DEFINE RepQuarters AS
SELECT COUNT(TransId) AS NumTrans
FROM SaleState
GROUP BY SalesRep, Quarter;
RETURN Quarters AS
SELECT AVG(NumTrans) AS AvgTransPerRep
FROM RepQuarters
GROUP BY Quarter
RepQuarters文によって、レコードのリストが生成されます。各レコードに格納されている属性は、
{ SalesRep, Quarter, NumTrans }です。次に例を示します。
{ J. Smith, 11Q1, 10 }
{ J. Smith, 11Q2, 3 }
{ F. Jackson, 10Q4, 10 }
...
Quartersの文では、
RepQuartersの文の結果を使用して属性
{ Quarter, AvgTransPerRep }のリストを生成します。次に例を示します。
{ 10Q4, 10 }
{ 11Q1, 4.5 }
{ 11Q2, 6 }
...
状態名
状態名は、次の構文を使用してEQLの
FROM句内で指定できます。
FROM <statename>[_FILTERED | _UNFILTERED | _ALL]
ここで、
- statename_FILTEREDは、すべてのフィルタが適用された状態を表します(つまり、問合せの状態にあるすべてのフィルタ)。
- statename (つまり、フィルタリング修飾子のない単なる状態名を使用する場合)は、statename_FILTEREDのシノニムです。
- statename_UNFILTEREDは、セキュリティ・フィルタのみが適用された状態を示します。
- statename_ALLは、statename_UNFILTEREDのシノニムです。
1つの例として、
EQLQuery型を使用している、次のような単純な対話サービスの問合せについて考えてみます。
<Request>
<Language>en</Language>
<State>
<Name>WineState</Name>
<CollectionName>Wines</CollectionName>
<DataSourceFilter Id="DataFltr">
<filterString>WineType <> 'Red'</filterString>
</DataSourceFilter>
<SelectionFilter Id="SecFltr">
<filterString>Price > 25</filterString>
</SelectionFilter>
</State>
<EQLConfig Id="WineRecs">
<EQLQueryString>
RETURN results AS
SELECT Price AS prices
FROM WineState
GROUP BY prices
</EQLQueryString>
</EQLConfig>
</Request>
この問合せは次のように動作します。
- 最初に、DataSourceFilterフィルタ(これはセキュリティ・フィルタです)により、WineType=Redが割り当てられているレコードが削除されます。現在の小規模なデータ・セットの場合、フィルタを通過するのは11レコードのみです。(WineTypeは単一割当てである必要があることに注意してください。そうではない場合、問合せは失敗します。)
- 次に、SelectionFilterフィルタにより、Price割当てが$25以上のレコードが選択されます。ここで(前の11レコードから)7レコードが除外され、4レコードが残ります。
- EQL文のFROM句により、WineStateという名前の状態を参照します。
EQL文のFROM句でWineStateという名前の状態を参照しているため、状態の両方のフィルタが適用され、4レコードが返されます。