Arrays postgres比较从字符串\u到数组的不同字符和数组
我在比较博士后类型时遇到问题,如果能得到一些帮助,我将不胜感激。我正在从包含tilda分隔字符串的配置表中提取有效的文档类型,如下所示: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} 接下来,我需要为给定人员选择与我的文档
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;