企业级搜索 SQL 语法中的多值 (ARRAY) 比较

比较内容中存储的具有多个值的列(多值列)。

…WHERE <column> <comp_op> [<quantifier>] <comparison_list>

Remarks

如果列引用并非多值列,则企业级搜索将返回一条错误。列数据类型必须与比较列表的元素兼容。如有必要,您可以将列引用转换为其他数据类型。

您可以在 WHERE 子句中使用任何常见的比较运算符。在多值比较中,比较运算符的含义会略有不同,具体取决于您是否使用限定符以及使用哪个限定符。因此,我们在后面的特定限定符表中说明了比较运算符的功能。

比较列表指定了与多值列进行比较的一组文字值。以下是比较列表的语法:

ARRAY [<literal>,<literal>]

备注

请注意比较列表的语法。您必须在组成比较列表的一组文字值周围添加方括号。不要在比较列表的单个元素周围添加方括号。例如,ARRAY [1,2,3] 是正确的语法,但 ARRAY [1[,2][,3]] 则是错误的。

可选的限定符指定了用于确定多值比较将返回 TRUE 还是 FALSE 的方法。以下各部分将介绍每个限定符,以及使用该限定符时每个比较运算符的含义。

不指定限定符

如果您不指定限定符,将对左侧 (L) 的每个元素与右侧 (R) 处于相同位置的元素进行比较。比较将从数组中第一个元素开始,一直进行到最后一个元素。如果左侧的所有元素都等于右侧的相应元素,则数组元素的个数将决定哪个数组更大。

下表列出了未指定任何限定符时比较运算符的操作,并逐一进行了简短说明。

运算符

说明

=

当每个左侧元素都与相应的右侧元素值相等并且两个数组的元素数相等时,“等于”将返回 TRUE。

!= 或 <>

当有一个或多个左侧元素与相应的右侧元素值不相等,或左侧和右侧数组的元素数量不相等时,“不等于”将返回 TRUE。

>

当每个左侧元素值都大于相应的右侧元素值时,“大于”将返回 TRUE。如果所有左侧元素值都与相应的右侧元素相匹配,并且右侧数组中包含左侧数组中没有的元素,“大于”将返回 TRUE。

>=

当每个左侧元素值都大于或等于相应的右侧元素值时,“大于或等于”将返回 TRUE。

<

当每个左侧元素值都小于相应的右侧元素值时,“小于”将返回 TRUE。当左侧元素数量少于右侧元素数量时,“小于”同样会返回 TRUE。

<=

当每个左侧元素值都小于或等于相应的右侧元素值时,“小于或等于号”将返回 TRUE。

ALL 限定符

ALL 限定符用于指定将左 (L) 侧的每个元素与右 (R) 侧的每个元素进行比较。若要返回“TRUE”,左侧的所有元素在与右侧的每个元素比较时,比较结果都必须为 TRUE。左侧和右侧数组中的元素数量对结果没有任何影响。

下表显示了每个比较运算符在与 ALL 限定符一起使用时的含义。

运算符

说明

=

当每个左侧元素值与每个右侧元素值都相等时,“等于”将返回 TRUE。

!= 或 <>

当有一个或多个左侧元素值与任何右侧元素值不相等时,“不等于”将返回 TRUE。

>

当每个左侧元素值都大于每个右侧元素值时,“大于”将返回 TRUE。

>=

当每个左侧元素值都大于或等于每个右侧元素值时,“大于或等于”将返回 TRUE。

<

当每个左侧元素值都小于每个右侧元素值时,“小于”将返回 TRUE。

SOME(或 ANY)限定符

您可以交替使用 SOME 限定符和 ANY 限定符。SOME 限定符指定将左 (L) 侧每个元素与右 (R) 侧每个元素进行比较。若要返回 TRUE,将左侧元素与右侧每个元素比较时,至少要有一个元素的比较结果为“TRUE”。左侧和右侧数组中的元素数对结果没有任何影响。

下表显示了每个比较运算符与 SOME 限定符一起使用时的含义。

运算符

说明

=

当至少有一个左侧元素值与任何一个右侧元素值相等时,“等于”将返回 TRUE。

!= 或 <>

当没有任何左侧元素值与任何一个右侧元素值相等时,“不等于”将返回 TRUE。

>

当至少有一个左侧元素值大于任何右侧元素值时,“大于”将返回 TRUE。

>=

当至少有一个左侧元素值大于或等于任何右侧元素值时,“大于或等于”将返回 TRUE。

<

当至少有一个左侧元素值小于任何右侧元素值时,“小于”将返回 TRUE。

示例

以下比较的值均为 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]

See Also

参考

企业级搜索 SQL 语法中的非全文谓词

企业级搜索 SQL 语法中的文字值比较