获取postgres中数组列中具有两个值之一的记录

时间:2015-10-02 23:40:27

标签: sql postgresql

我在postgresql中有一个array_agg列,其值如下:

"{Metabolic/Endocrinology}"
"{Cardiovascular}"
"{Oncology}"
"{Autoimmune/Inflammation}"

一个字符串变量基本上是一个id的array_agg。

现在,我想从此表中获取所有记录,其中存在Oncology或Autoimmune / Inflammation。

我正在做这样的事情,但我不确定为什么会抛出错误。

select * from Table where id = ANY('{Oncology,Autoimmune/Inflammation}')

它会抛出以下错误。

ERROR: operator does not exist: text[] = text
SQL state: 42883
Hint: No operator matches the given name and argument type(s). You may need to add explicit type casts.
Character: 67

请注意我也使用了:: TEXT []但仍然出错。

2 个答案:

答案 0 :(得分:1)

您想使用数组重叠运算符&&

请参阅array operators

e.g。

select * from (
  VALUES
  (ARRAY['Oncology','Pediatrics']),
  (ARRAY['Autoimmune/Inflammation','Oncology']),
  (ARRAY['Autoimmune/Inflammation']),
  (ARRAY['Pediatrics']),
  (ARRAY[]::text[])
) "Table"(id)
where id && ARRAY['Oncology','Autoimmune/Inflammation'];

顺便说一句,我建议尽可能使用SQL标准ARRAY[...]构造函数。

此外,拥有id列(大概是primary key,如果没有,名称令人困惑)几乎肯定是可怕的想法,定义为数组类型。

答案 1 :(得分:0)

由于id类型为text[],此查询应该有效:

select * from Table where id[1] = ANY('{Oncology,Autoimmune/Inflammation}')

但是,只有当id始终是单元素数组时,才会给出预期的结果。