セットについて

EQLでは、コレクションからの複数割当て属性をセットとして表します。

1つのセットは、通常1つの複数割当て属性の値から導出された、要素のグループから構成されます。EQLセットは、数学セットと同様に動作することを意図しています。セット内の要素の順序は指定されません(通常、識別できません)。空のセットとは、要素を1つも含まないセットのことです。

セット内のすべての要素を同じデータ型にする必要があります。セット内の要素が2つの複数割当て属性からのものである場合(たとえば、INTERSECTION行関数を使用した場合)、これらの2つの複数割当て属性は同じデータ型である必要があります。セットには重複値が含まれてはならず、他のセットを含むこともできません。

セットは1つのEQL文内で次のようにして構成されます。

これらの手法についてはすべてこの項で説明します。

セットは、あるEQL問合せから別のEQL問合せにおいて永続的ではありません。

セットのデータ型

セットのデータ型は次のとおりです。
  • mdex:boolean-set (複数割当てのブール属性)
  • mdex:dateTime-set (複数割当ての日時属性)
  • mdex:double-set (複数割当てのdouble属性)
  • mdex:duration-set (複数割当ての期間属性)
  • mdex:geocode-set (複数割当てのジオコード属性)
  • mdex:long-set (複数割当ての32ビット整数属性および64ビットlong属性)
  • mdex:string-set (複数割当ての文字列属性)
  • mdex:time-set (複数割当ての時間属性)
セットは厳密に型が指定されます。特定のセット内のすべての要素を同じデータ型にする必要があります。たとえば、次のセット
{3, 4.0, 'five'}
には、整数、doubleおよび文字列が含まれているため無効です。

セットとNULL

セットにはNULL値を含むことはできません。さらに、セットはNULLになることはできませんが、空になることは可能です。これらの要件は、複数割当てのコレクション属性およびセット型の他の式の両方に適用されます。

コレクション・レコードに複数割当て属性に対する割当てがない場合、EQL問合せにおいて、そのレコードのその属性の値は空のセットになります。

EQL文(DEFINEまたはRETURNのいずれか)の結果にはセットが含まれている場合があります。つまり、たとえば、エンティティ(ビュー)を定義し、そのエンティティを使用する問合せに対して、複数割当て属性のすべての値を指定できます。

セットでは、IS NULLおよびIS NOT NULL演算はサポートされていません。かわりに、IS_EMPTYおよびIS_NOT_EMPTY関数を使用して、セットが空であるかどうかを判別してください。さらに、IS_EMPTYおよびIS_NOT_EMPTY関数は、アトミック値(単一割当て属性など)では使用できません。

セットの等価性

セットの等価性は、数学的なセットの等価性と同じです。つまり、2つのセットは、それぞれにまったく同じ要素が含まれている場合にのみ等価です。セット内での要素の順序は重要ではありません。空の2つのセットは等価です。

セットの等価性および非等価性は、同じ型の2つのセットに対してのみ定義されます。たとえば、mdex:long-setmdex:geocode-setの等価性を比較することはできません。比較すると、EQL型エラーが発生します。

セット間の等価性をテストするために、= (等しい)および<> (等しくない)演算子を使用できます。セットでは、< (より小さい)および> (より大きい)演算子は定義されていません。

セット、関数および演算子

この章では、セットで使用される集計関数および行関数について説明します。

さらに、セットは、セットおよび単一割当て属性の両方で動作する次の関数でも使用でき、これについてはこのガイドの他の場所で説明します。
  • ARBは、セットにおいてグループ内のすべての行を調べ(空のセットおよび空でないセットの両方)、いずれかの行からセット値を選択します。この関数の詳細は、「ARB」を参照してください。
  • COUNTは、NULLではないすべてのセットを数えます(つまり、空のセットを含む、グループ内のすべてのセット)。詳細は、「COUNT関数」を参照してください。
  • COUNT_APPROXでもNULLではないすべてのセットを数えます。詳細は、「COUNT_APPROX」を参照してください。
  • COUNTDISTINCTは、空のセットを含む、すべてのセットを数えます。詳細は、「COUNTDISTINCT関数」を参照してください。
  • APPROXCOUNTDISTINCTでも、空のセットを含む、すべてのセットを数えます。詳細は、「APPROXCOUNTDISTINCT関数」を参照してください。
  • HAS_REFINEMENTSは、特定の属性で非暗黙的な絞込みが現在のナビゲーション・ステートにあるかどうかを計算します。詳細は、「HAS_REFINEMENTS」を参照してください。

前述したように、セット間の等価性をテストするために、= (等しい)および<> (等しくない)演算子を使用できます。セットでは、他の演算子(乗算演算子*など)は使用できません。