我在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 []但仍然出错。
答案 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
始终是单元素数组时,才会给出预期的结果。