首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取postgres中数组列中具有两个值之一的记录

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

Stack Overflow用户
提问于 2015-10-03 07:40:27
回答 2查看 142关注 0票数 0

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

代码语言:javascript
复制
"{Metabolic/Endocrinology}"
"{Cardiovascular}"
"{Oncology}"
"{Autoimmune/Inflammation}"

基本上是一个字符串变量,由一个id进行array_agg。

现在我想从这个表中获取所有存在肿瘤学或自身免疫/炎症的记录。

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

代码语言:javascript
复制
select * from Table where id = ANY('{Oncology,Autoimmune/Inflammation}')

它抛出以下错误。

代码语言:javascript
复制
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 [],但它仍然给出一个错误。

EN

回答 2

Stack Overflow用户

发布于 2015-10-03 18:13:26

您希望使用数组重叠运算符&&

参见array operators

例如:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-10-03 08:45:00

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

代码语言:javascript
复制
select * from Table where id[1] = ANY('{Oncology,Autoimmune/Inflammation}')

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32917346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档