複数値 (ARRAY) の比較
コンテンツ インデックスに格納されている列には複数の値を含めることができます。これらの複数値の列は、ARRAY 比較述語を使用して比較できます。
ARRAY 比較述語には、次の構文があります。
...WHERE <column> <comp_op> [<quantifier>] <comparison_list>
...WHERE <column> <comp_op> <value>
列参照が複数値列でない場合は、エラーが返されます。 列データ型は、比較リストの要素と互換性がある必要があります。 必要に応じて、列参照を別のデータ型として キャスト できます。
比較演算子 (comp_op) には、通常の比較演算子のいずれかを指定できます。 複数値比較では、比較演算子の意味は、量指定子が使用されているかどうかによって若干異なります。 量指定子は、比較リスト内の値のすべてまたは一部に対して比較を行う必要があるかどうかを識別します。 比較演算子の関数については、このドキュメントで後述する各量指定子 (ALL および SOME) について説明する表を参照してください。
演算子の後の値は、複数値列のすべての要素と比較される 1 つのリテラル値を指定します。 いずれかの要素が値と一致する場合、述語は true です。
比較リストは、複数値列と比較されるリテラル値の配列を指定します。 比較リストの構文は次のとおりです。
ARRAY '['<literal> [,<literal>]']'
重要
比較リストの構文に注意してください。 比較リストを構成するリテラルのグループは、角かっこで囲む必要があります。 比較リストの個々の要素を角かっこで囲まないでください。 したがって、ARRAY [1] と ARRAY [1,2,3] は有効ですが、ARRAY [1[,2][,3]] は有効ではありません。
複数値比較が true または false を返すかどうかを判断するために使用されるメソッドは、省略可能な量指定子によって指定されます。 次のセクションでは、各量指定子と、量指定子を使用する場合の各比較演算子のしくみについて説明します。
存在しない量指定子
量指定子が指定されていない場合、比較の左側の各要素は、右側の同じ位置にある要素と比較されます。 比較は配列内の最初の要素から始まり、最後の要素まで進みます。 左側のすべての要素が右側の対応する要素と等しい場合は、配列要素の数を使用して、どの配列が大きいかを判断します。
次の表に、量指定子が指定されていない場合の比較演算子の操作を示し、それぞれの簡単な説明を示します。
演算子 | 説明 |
---|---|
= | 'Equal to' は、各左側の要素が対応する右辺要素と同じ値を持ち、両方の配列が同じ数の要素を持つ場合に true を返します。 |
!= または <> | 'Not equal to' は、1 つ以上の左側の要素に対応する右側の要素と異なる値がある場合、または左側と右側の配列に同じ数の要素がない場合に true を返します。 |
> | 'より大きい' は、各左側の要素の値が対応する右側の要素の値より大きい場合に true を返します。 すべての左側の要素値が対応する右側の要素と完全に一致し、左側の配列に右側の配列よりも多くの要素がある場合、'greater than' は true を返します。 |
>= | すべての左側の要素の値が対応する右辺要素の値以上の場合、'以上' は true を返します。 すべての左側の要素の値が対応する右側の要素以上で、左側の配列が右側の配列と同じまたは複数の要素を持つ場合、'より大きい' は true を返します。 |
< | 'Less than' は、各左側の要素の値が対応する右辺要素の値より小さい場合に true を返します。 'より小さい' は、左側の要素が右辺よりも少ない場合にも true を返します。 |
<= | 'Less than or equal to' returns true when the value of every left-side element is less or equal to the value of the corresponding right-side element. すべての左側の要素の値が対応する右側の要素と等しいか小さい場合、左側の配列の要素が右側の配列と同じか少ない場合、'より大きい' は true を返します。 |
ALL 量指定子
ALL 量指定子は、左側の各要素を右側のすべての要素と比較することを指定します。 true を返すには、右側のすべての要素と比較する場合、左側の各要素の比較は true である必要があります。 左右の配列側の要素の数は、結果には影響しません。
次の表は、各比較演算子が ALL 量指定子と共にどのように機能するかを示しています。
演算子 | 説明 |
---|---|
= | 'Equal to' は、各左側の要素値が右辺のすべての要素値と同じ場合に true を返します。 |
!= または <> | 'Not equal to' は、少なくとも 1 つの左側の要素値が右辺要素の値と異なる場合に true を返します。 |
> | 'より大きい' は、各左側の要素値が右辺のすべての要素値より大きい場合に true を返します。 |
>= | 'Greater than or equal to' returns true when each left-side element value is greater or equal to every right-side element value. |
< | 'Less than' は、各左側の要素値が右辺のすべての要素値より小さい場合に true を返します。 |
<= | 'Less than or equal to' returns true when each left-side element value is less or equal to every right-side element value. |
SOME (または ANY) 量指定子
SOME 量指定子と ANY 量指定子は同じ意味で使用できます。 ALL 量指定子と同様に、SOME 量指定子は、左側の各要素が右側のすべての要素と比較されることを指定します。 true を返すには、右側の任意の要素と比較した場合、左側の要素の少なくとも 1 つに対して比較が true である必要があります。 左側と右側の配列の要素の数は、結果には影響しません。
次の表は、各比較演算子が SOME 量指定子とどのように機能するかを示しています。
演算子 | 説明 |
---|---|
= | 'Equal to' は、少なくとも 1 つの左側の要素値が右辺要素の値と同じである場合に true を返します。 |
!= または <> | 'Not equal to' は、左側の要素の値が右辺要素の値と同じでない場合に true を返します。 |
> | 'より大きい' は、少なくとも 1 つの左側の要素値が右辺の要素値の 1 つよりも大きい場合に true を返します。 |
>= | 'Greater than or equal to' returns true when least one of the left-side element values is greater or equal to any one of the right-side element values. |
< | 'Less than' は、少なくとも 1 つの左側の要素値が右辺要素の値のいずれかより小さい場合に true を返します。 |
<= | 'Less than or equal to' returns true when least one of the left-side element values is less or equal to any one of the right-side element values. |
例
次の例では、ドキュメントが "Finance" カテゴリまたは "Planning" カテゴリに含まれているかどうかを確認します。
SELECT System.ItemUrl FROM SystemIndex WHERE System.Category =
SOME ARRAY['Finance','Planning']
次の比較はすべて true と評価されます。 実際に使用する場合、検索クエリ構文では、左側がリテラル値ではなくプロパティである必要があります。
ARRAY [1,2] > ARRAY [1,1]
ARRAY [1,2] > ARRAY [1,1,2]
ARRAY [1,2] < ARRAY [1,2,3]
ARRAY [1,2] = SOME ARRAY [1,12,27,35,2]
ARRAY [1,1] != ALL ARRAY [1,2]
ARRAY [1,20,21,22] < SOME ARRAY [0,40]
ARRAY [1,20,21,22] < ANY ARRAY [0,40]
関連トピック