带有逗号分隔字符串的 Postgres 查询列,用于字符串数组

MB3*_*B34 2 postgresql array

我有一个表,其中包含如下所示的数据:

id  oe
--  ---------------------------------------------------
 1  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 2  64526915083,64526953474
 3  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 4  F4DH8C607AA,F4DHAA
 5  F4DH8C607AA,F4DHAA
 6  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 7  64526915083,64526953474
 8  F4DH8C607AA,F4DHAA
 9  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
11  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
12  64526915083,64526953474
13  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14  F4DH8C607AA,F4DHAA
15  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
Run Code Online (Sandbox Code Playgroud)

如何编写查询,在其中传递值数组并返回该列包含数组中任何值的行?

这是有效的,因为我从查找表中获得了另一个值,而我宁愿不这样做,因为表中的hol列上没有索引pubnet
[请不要建议添加一个,因为我无法修改数据库]

SELECT * FROM pubnet 
where hol in (select hol from id2hol where id in ('F3DH19860AA', 'F4DHAA'))
Run Code Online (Sandbox Code Playgroud)

这将是结果集:

id  oe
--  ---------------------------------------------------
 4  F4DH8C607AA,F4DHAA
 5  F4DH8C607AA,F4DHAA
 8  F4DH8C607AA,F4DHAA
 9  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
13  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14  F4DH8C607AA,F4DHAA
15  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 5

您需要将逗号分隔的值转换为数组,然后您可以使用重叠运算符 &&

select *
from pubnet
where string_to_array(oe, ',') && array['F3DH19860AA', 'F4DHAA']
Run Code Online (Sandbox Code Playgroud)

  • @MB34:耸耸肩。如果您违反了规范化规则,那么您期望什么?但可以在 `string_to_array(oe, ',')` 上创建索引 (4认同)