Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays postgres比较从字符串\u到数组的不同字符和数组_Arrays_Postgresql_Comparison - Fatal编程技术网

Arrays postgres比较从字符串\u到数组的不同字符和数组

Arrays postgres比较从字符串\u到数组的不同字符和数组,arrays,postgresql,comparison,Arrays,Postgresql,Comparison,我在比较博士后类型时遇到问题,如果能得到一些帮助,我将不胜感激。我正在从包含tilda分隔字符串的配置表中提取有效的文档类型,如下所示: SELECT string_to_array(value,'|') as document_kinds FROM company_configs WHERE option = 'document_kinds' 这给了我一个值数组,所以 “doc1 | doc2 | doc3”变成{doc1,doc2,doc3} 接下来,我需要为给定人员选择与我的文档

我在比较博士后类型时遇到问题,如果能得到一些帮助,我将不胜感激。我正在从包含tilda分隔字符串的配置表中提取有效的文档类型,如下所示:

SELECT string_to_array(value,'|') as document_kinds
  FROM company_configs
  WHERE option = 'document_kinds'
这给了我一个值数组,所以

“doc1 | doc2 | doc3”变成{doc1,doc2,doc3}

接下来,我需要为给定人员选择与我的文档类型匹配的文档:

SELECT * FROM people
  JOIN documents ON ...
  WHERE kind IN
   (SELECT string_to_array(value,'|') as document_kinds
    FROM company_configs
    WHERE option = 'document_kinds')
documents.kind列为“字符变化” 我的理解是,string_to_数组正在生成一个文本值“text[]”数组

此查询生成错误“错误:运算符不存在:字符变化=文本[]”

如果我把“善良”转换成文字

SELECT * FROM people
 JOIN documents ON ...
 WHERE kind::text IN
  (SELECT string_to_array(value,'|') as visa_document_kinds FROM languages_united.company_configs WHERE option = 'visa_document_kinds')
我得到错误“error:operator不存在:text=text[]”

我不知道如何比较这两者,如有任何建议,我将不胜感激

提前谢谢 丹


Postgres 9.4.1

如果子查询只返回一行,则可以使用来针对任何数组元素进行选择:

SELECT *
FROM people
JOIN documents ON ...
WHERE kind = ANY (
  SELECT string_to_array(value,'|') as document_kinds
  FROM company_configs
  WHERE option = 'document_kinds');
如果子查询可能返回多行,则可以使用:


(您必须调整此选项以匹配查询的其余部分。)

非常感谢您的回答,但有一些调整已经起到了作用——regex_split_to_表不接受/需要“g”选项,需要将分隔符转义到“\\\\”。再次感谢。达娜,好的。regex中的
'g'
标志表示必须匹配所有匹配项,但我认为这对于这个函数来说是显而易见的。答案已更新。
SELECT *
FROM people
JOIN documents ON ...
JOIN (
  SELECT document_kinds
  FROM company_configs,
       regexp_split_to_table(value, '\|') as document_kinds
  WHERE option = 'document_kinds') sub ON sub.document_kinds = kind;