Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres检查数组值是否在列表中_Sql_Postgresql - Fatal编程技术网

Sql Postgres检查数组值是否在列表中

Sql Postgres检查数组值是否在列表中,sql,postgresql,Sql,Postgresql,如何检查单行中的任何数组值是否在我的列表中? 这是我的桌子。我们叫它ABC吧 id | page_id | values ------------------+-------------+---------------------------------------------------------------------

如何检查单行中的任何数组值是否在我的列表中? 这是我的桌子。我们叫它ABC吧

        id        |   page_id   |                                  values                                   
------------------+-------------+-------------------------------------------------------------------------
 1376092679147519 |     xyz     | {6004036173148,6003373173651,6003050657850}
 1375487155874738 |     xyz     | {6003301698460,6003232518610}
 1497527026945449 |     xyz     | {6003654559478,6003197656807}
 1375388575884596 |     xyz     | {6003512053894,6003450241842,6003051414416}
 1319144441504401 |     xyz     | {6004001256506,6003514818642,6003400993421}
我的目标是选择那些行,其中一个值出现在给定列表“6004036173148”、“6003197656807”中

SELECT id, page_id, values from ABC WHERE -SOME CLAUSE- IN ('6004036173148', '6003197656807');

        id        |   page_id   |                                  values                                   
------------------+-------------+-------------------------------------------------------------------------
 1376092679147519 |     xyz     | {6004036173148,6003373173651,6003050657850}
 1497527026945449 |     xyz     | {6003654559478,6003197656807}
下面是我的PosgreSQL表的结构

                             Table "public.ABC"
       Column       |           Type           |       Modifiers        
--------------------+--------------------------+------------------------
 id                 | character varying        | not null
 page_id            | character varying        | not null
 values             | character varying[]      | 
Indexes:
    "ABC_pkey" PRIMARY KEY, btree (id)

如果我正确理解,您需要:

select * from t
where "values" && '{6004036173148,6003197656807}'::character varying[]
编辑

如果需要提取某些值,则可以使用unnest函数

请注意,若同一数组包含搜索列表中的多个值,则该行将重复。看看这个id=2的示例输出,您可以看到,关于我所说的内容:

with t(id, values) as(
    select 1, '{6004036173147,6003373173651,6003050657840}'::character varying[]
    union all
    select 2, '{6004036173148,6003373173652,6003050657850}'::character varying[]
    union all
    select 3, '{6004036173149,6003373173653,6003050657860}'::character varying[]
)


select tt.* from  
(select t.*, unnest(values) unn from t) tt
inner join (select unnest('{6003373173651,6004036173148,6003373173652}'::character varying[]) v  ) lst
on tt.unn = lst.v

只是出于好奇,您会如何在tsql中做到这一点?SQL Server有数组类型吗?我不这么认为。如果是这样,我们将如何在tsql中使用数组?或者我错过了你的问题?我想你可以假装:创建表temp id VARCHAR20,page_id VARCHAR10,rValues VARCHAR100插入临时值'1376092679147519','xyz','600403617314860033731736516003050657850}','1375487155874738','xyz','600330694603232518610}','1497026945449','xyz','{60036545594786003197656807}、'1375388575884596'、'xyz'、'600351205389460034502418426003051414416}、'1319144441504401'、'xyz'、'60040012565066035148186426003400993421}从临时索引“%6003514818642%”中选择*,右值>0侧注:尽量不要将保留字如值用作列名