本文主要介绍postgresql实现字符串分段字段列表查询,具有很好的参考价值,希望对大家有所帮助。来和边肖一起看看。
在数据查询中,一个A表存储另一个B表的id,用','分隔
例如:
假设现在要关联查询一些关于表B的信息。
拆分查询:字符串到列表函数:regexp_split_to_table()
1从regexp_split_to_table中选择*
查询结束后,字符串变成一个列表,然后就可以根据这个列表找到表B的相关信息。
选择*
来自pm.product
其中id:text文本在
(从regexp_split_to_table中选择*((从bp.fee _ project _ meal中选择product _ ids,其中id=116199376233182210),','))
首先数据验证是正确的,说明sql没有问题,然后一起进行联查
1.因为这个表a与表b具有一对多的关系,所以我们首先关联多个表。
选择a.id作为“表_id”,
A.name作为“表名”,
P.name为“b表名”
来自bp.fee _ project _饭局a
LEft JOIN pm . product p on p . id : text
in(从regexp_split_to_table中选择*((从bp.fee _ project _ meal中选择product _ ids,其中id=a.id),','))
其中a.id=116199376233182210
2.还有一个就是只要我找出表A的数据,表B的数据中就有一些字段是以非拼接的形式存在的,也就是说我现在就想找出表A的数据
选择
A.id为' table _id ',
A.name作为“表名”,
Bb.p_id为' b表_拼接id ',
Bb.p_name为' b表_拼接名'
来自bp.fee _ project _饭局a
左连接(
选择a.id为' bb_id ',String_agg(p.id:text,',')为' p_id ',String _ agg(p . name : text,',')为' p_name '
来自bp.fee _ project _饭局a
LEFT JOIN pm.product p on
p.id:text in(从regexp_split_to_table中选择*((从bp.fee _ project _ meal中选择product _ ids,其中id=a.id),','))
分组依据1
)bb上bb。bb_id'=a.id
以上是字符串字段的反汇编查询。
补充:pgsql查询字段中用逗号分隔的字符串数
1从表中选择长度(翻译(列,' | |列,'))1
参见:
1.translate是类似replace的替换函数,但是translate是一次替换多个单个字符。
2.基本用法,对应替换字符。
示例:
1从dual选择translate('1234567 ',' 123 ',' ABC ');-1被a取代,2被B取代,3被c取代。