gpt4 book ai didi

arrays - postgres 将不同字符与 string_to_array 中的数组进行比较

转载 作者:行者123 更新时间:2023-11-29 12:19:37 25 4
gpt4 key购买 nike

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

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 列是 'character varying'我的理解是 string_to_array 正在生成一个文本值数组 'text[]'

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

如果我将 'kind' 转换为文本,使用

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')

我收到错误“错误:运算符不存在:text = text[]”

我不确定如何比较两者,如有任何建议,我将不胜感激。

提前致谢丹

Postgres 9.4.1

最佳答案

您可以使用 ANY operator 选择任何数组元素,如果您的子查询恰好返回一行:

SELECT *
FROM people
JOIN documents ON ...
WHERE kind = ANY (
SELECT string_to_array(value,'|') as document_kinds
FROM company_configs
WHERE option = 'document_kinds');

如果子查询可能返回多行,可以使用regexp_split_to_table() function :

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;

(您必须调整它以匹配您的其余查询。)

关于arrays - postgres 将不同字符与 string_to_array 中的数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33390247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com