複数値 (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 を返します。 |
> | 'Greater than' は、各左側の要素の値が対応する右辺要素の値より大きい場合に true を返します。 すべての左側の要素値が対応する右辺の要素と完全に一致し、左側の配列に右側の配列よりも多くの要素がある場合、'greater than' は true を返します。 |
>= | 'Greater than or equal to' は、すべての左側の要素の値が対応する右側の要素の値以上の場合に true を返します。 すべての左側の要素の値が対応する右側の要素と等しいか、またはそれより大きい場合、左側の配列に右側の配列と同じまたは複数の要素がある場合、'greater than' は true を返します。 |
< | 'Less than' は、各左側の要素の値が対応する右辺要素の値より小さい場合に true を返します。 'Less than' は、左側の要素が右側よりも少ない場合にも true を返します。 |
<= | 'Less than or equal to' は、すべての左辺要素の値が対応する右辺要素の値以下の場合に true を返します。 すべての左側の要素の値が対応する右側の要素と等しいか小さい場合、左側の配列の要素が右側の配列と同じか少ない場合、'greater than' は true を返します。 |
ALL 量指定子
ALL 量指定子は、左側の各要素を右側のすべての要素と比較することを指定します。 true を返すには、右側のすべての要素と比較する場合、左側の各要素の比較が true である必要があります。 左辺と右辺の要素の数は、結果には影響しません。
次の表は、各比較演算子が ALL 量指定子とどのように機能するかを示しています。
演算子 | 形容 |
---|---|
= | "等しい" は、各左側の要素値が右辺のすべての要素値と同じである場合に true を返します。 |
!= または <> | 'Not equal to' は、少なくとも 1 つの左側の要素値が右辺の要素値と異なる場合に true を返します。 |
> | 'Greater than' は、各左辺要素の値が右辺のすべての要素値より大きい場合に 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' は、各左側の要素値が右辺のすべての要素値以下の場合に true を返します。 |
SOME (または ANY) 量指定子
SOME 量指定子と ANY 量指定子は、同じ意味で使用できます。 ALL 量指定子と同様に、SOME 量指定子は、左側の各要素が右側のすべての要素と比較されることを指定します。 true を返すには、右側の要素と比較した場合、左側の要素の少なくとも 1 つに対して比較が true である必要があります。 左側と右側の配列の要素の数は、結果には影響しません。
次の表は、各比較演算子が SOME 量指定子とどのように機能するかを示しています。
演算子 | 形容 |
---|---|
= | 'Equal to' は、少なくとも 1 つの左側の要素値が右辺の要素値のいずれかと同じである場合に true を返します。 |
!= または <> | 'Not equal to' は、どの左側の要素値も右辺の要素値と同じでない場合に true を返します。 |
> | 'Greater than' は、少なくとも 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]
関連トピック