Postgresql 用select查询(postgres)中的另一个值替换表中的逗号分隔值
我有两个表,表A有ID列,其值用逗号分隔,每个ID值在表B中都有表示Postgresql 用select查询(postgres)中的另一个值替换表中的逗号分隔值,postgresql,Postgresql,我有两个表,表A有ID列,其值用逗号分隔,每个ID值在表B中都有表示 Table A +-----------------+ | Name | ID | +------------------ | A1 | 1,2,3| | A2 | 2 | | A3 | 3,2 | +------------------ Table B +-------------------+ | ID | Value | +---
Table A
+-----------------+
| Name | ID |
+------------------
| A1 | 1,2,3|
| A2 | 2 |
| A3 | 3,2 |
+------------------
Table B
+-------------------+
| ID | Value |
+-------------------+
| 1 | Apple |
| 2 | Orange |
| 3 | Mango |
+-------------------+
我想知道是否有一种有效的方法来选择结果如下所示的位置
Name, Value
A1 Apple, Orange, Mango
A2 Orange
A3 Mango, Orange
Any suggestions would be welcome. Thanks.
有两个与正则表达式相关的函数非常有用:
- regexp_拆分为_表()
- regexp_拆分为_数组()
select name, value
from A
join B on B.id = ANY(regexp_split_to_array(A.id, E'\\s*,\\s*', 'g')::int[]))
然后,您可以使用array_agg(value),按名称分组,并使用array_to_string()格式化
但有两点需要注意:
select name, regexp_split_to_table(id, ',') id
from table_a;
此操作的结果可以连接到表b
,然后需要对连接结果进行分组,以获得逗号分隔的名称列表:
select a.name, string_agg(b.value, ',')
from (
select name, regexp_split_to_table(id, ',') id
from table_a
) a
JOIN table_b b on b.id = a.id
group by a.name;
SQLFiddle:感谢您的回复,我正在按照建议进行规范化,并使用连接将其重新分组。