MULTISET(e) 数据类型

MULTISET 数据类型是存储无序集的集合类型,它能包含重复的元素值。

MULTISET 中的元素没有顺序位置。也就是说,在 MULTISET 中不存在第一元素、第二元素或第三元素的概念。(有关具有元素的顺序位置的集合类型,请参阅 LIST(e) 数据类型。)

MULTISET 中的所有元素都具有相同的元素类型。要指定元素类型,使用以下语法:
MULTISET(element_type NOT NULL)
集合的 element_type 可以是下列任何类型:
  • 任何内置类型(SERIAL、SERIAL8、BIGSERIAL、BYTE 和 TEXT 除外)
  • 未命名或命名 ROW 类型
  • 另一个集合类型或不透明类型
除非另外指示,否则可以在使用任何其他数据类型的地方使用 MULTISET。例如:
  • 在用来搜索匹配的 MULTISET 值的 SELECT 语句 WHERE 子句中的 IN 谓词后面
  • 作为用来确定 LIST 列中的元素数目的 CARDINALITY 或 mi_collection_card( ) 函数的自变量

不能将 MULTISET 值用作聚集函数(例如,AVG、MAX、MIN 或 SUM)的自变量。

必须对 MULTISET 元素指定 NOT NULL 约束。其他约束对 MULTISET 列无效。有关 MULTISET 集合类型的更多信息,请参阅 GBase 8s SQL 指南:语法

如果两个 multiset 数据值具有相同的元素,那么它们相等,即使各元素在集中的位置不同。下列两个示例都是 multiset 值但不相等:
MULTISET {"blue", "green", "yellow"}
MULTISET {"blue", "green", "yellow", "blue"}
下列 multiset 值是相等的:
MULTISET {"blue", "green", "blue", "yellow"}
MULTISET {"blue", "green", "yellow", "blue"}

可以将相同表的不超过 97 列声明为 MULTISET 数据类型。(同一限制适用于 SET 和 LIST 集合类型。)