为了比较 Postgress 中的数组,有数组运算符。
在此处找到运算符部分:https://www.postgresql.org/docs/current/functions-array.html
比较两个数组的快速方法是这样做,
( (ARRAY_1 @> ARRAY_2) AND (ARRAY_1 <@ ARRAY_2) )
它基本上检查 ARRAY_2 中的所有唯一值是否存在于 ARRAY_1 AND 中,反之亦然。
不要忘记同时使用检查/条件/比较(AND)
这些称为包含运算符,它检查一个数组中的所有 唯一 值并将其与另一个进行比较。它们也被称为鸟运算符,因为运算符 @> AND <@ 类似于鸟的头部。
其工作方式如下:
ARRAY_1 <@ ARRAY_2
// Check/Direction: Left-to-Right
// Checks if all the unique elements in ARRAY_1 is present in ARRAY_2 as well. If yes, it will return TRUE
// Please note this will return TRUE even if ARRAY_2 has extra elements that are not present in ARRAY_1
同样,
ARRAY_1 @> ARRAY_2
// Note we have changed the operator to '@>' from '<@'. Check/Direction: Right-to-Left
// Checks if all the unique elements in ARRAY_2 is present in ARRAY_1 as well. If yes, it will return TRUE
// Please note this will return TRUE even if ARRAY_1 has extra elements that are not present in ARRAY_2
所以即使元素的顺序不同,它仍然可以工作。
查看> 或< 符号是避免混淆并记住这一点的简单方法。
将带有小于号指向的 ARRAY(唯一元素)与带有大于号指向的 ARRAY(唯一元素)进行比较。
因此,大于号指向的 ARRAY 可以包含额外的唯一元素,并且仍然返回 TRUE。
让我们尝试一些例子
SELECT array[1, 2, 3] @> array[1, 2, 3] AS RESULT
!-- Returns TRUE (Check is Right-to-Left)
SELECT array[1, 2, 3] @> array[3, 1, 2] AS RESULT
!-- Returns TRUE (Check is Right-to-Left)
SELECT array[1, 2, 3, 3, 3, 3] @> array[1, 2, 3] AS RESULT
!-- Returns TRUE (Check is Right-to-Left)
SELECT array[1, 2, 3, 3, 3, 3] <@ array[3, 2, 1, 3, 2, 5] AS RESULT
!-- Returns TRUE (Check is Left-to-Right)
SELECT array[1, 2, 3, 4] <@ array[1, 2, 3] AS RESULT
!-- Returns FALSE (Check is Left-to-Right)
SELECT array[1, 2, 3, 4] @> array[1, 2, 3] AS RESULT
!-- Returns TRUE (Check is Right-to-Left)
SELECT array[1, 2, 3] <@ null AS RESULT
!-- Returns empty (Check is Left-to-Right)
SELECT array[1, 2, 3] @> null AS RESULT
!-- Returns empty (Check is Right-to-Left)
SELECT null <@ null AS RESULT
!-- Doesn't work if both the values are null - Error: Operator is not unique: unknown <@ unknown
SELECT array[1, 2, 3] <@ array[] AS RESULT
!-- Doesn't work on empty arrays - Error: Cannot determine type of empty array
SELECT array[] <@ array[] AS RESULT
!-- Doesn't work on empty arrays - Error: Cannot determine type of empty array
请注意
- 这用于比较数组。
- 工作原理是从两个数组中提取唯一值 - 然后比较它们。
- 它不检查 ARRAY 中的元素计数。即,即使两个数组的长度不同,它也可以返回 TRUE(
[1, 2] @> [1] 或 [1, 1] @> [1] 仍然是 TRUE)
- 如果两个值都是
NULL,则不起作用
- 如果任一数组为空则不起作用 (
[])