SQL测试数组是否包含整数

SQL测试数组是否包含整数,sql,arrays,hsqldb,Sql,Arrays,Hsqldb,我有一个SQL表,比如 CREATE TABLE Test ( ContentArray INTEGER ARRAY )`. I can insert an column with `INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[1,2,3,4] ) 但我不知道如何获取ContentArray包含整数3的所有列 例如: INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[1,2] ) INSER

我有一个SQL表,比如

CREATE TABLE Test ( ContentArray INTEGER ARRAY )`.
I can insert an column with `INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[1,2,3,4] )
但我不知道如何获取
ContentArray
包含整数3的所有列

例如:

INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[1,2] )

INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[3,4] )

INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[4,5] )

INSERT INTO Test ( ContentArray ) VALUES ( ARRAY[5,6] )

SELECT ContentArray FROM Test WHERE /* ContentArray contains 5 and 6 */

应该返回
数组[5,6]

鉴于DBMS和一些快速研究,SQL2008似乎支持ANY关键字以允许对数组数据类型进行这种类型的查询:

SELECT * FROM Test WHERE 3 = ANY (ContentArray);

我仍然不建议将数组数据类型用于任何非平凡的事情,我不确定上述查询的性能如何,但我确定它不如带子项的主表好。

您使用的是哪种RDMB?不确定您使用的是哪种DBMS,但对于关系数据库中的字段使用数组数据类型几乎总是一个坏主意。更好的选择是将这些值存储为主表的子表,这样查询就变得简单。请给我一个例子好吗?创建表主表(somekey INTEGER)创建表子表(somekey INTEGER,value INTEGER)插入主表(1)插入子表(1,1)插入子表(1,3)插入主表(2)插入子表(2,1)插入到子级(2,2)插入到主级(3)插入到子级(3,3)从主级内部选择*在master.somekey=child.somekey上连接子级,其中child.value=3HSQLDB尚不支持
3=ANY(ContentArray)
。它支持
3 IN(UNNEST(ContentsArray))
以及执行better@fredt非常感谢。我将测试什么更快(对我来说更好)。
SELECT*FROM-test-WHERE-POSITION\u-ARRAY(3-IN-ContentArray)>0
(617毫秒)比
SELECT*FROM-test-WHERE-3-IN(unest(ContentArray))
(2118毫秒)快。(检索到1220608行,总行数:4882432)。这对我来说已经够快了