在使用postgres数据库时,我遇到了一种情况,我必须根据存储在表中的ID来显示列名,并以逗号分隔。
表1名称:标签印刷
id field_id
1 1,2
表2名称:资料栏位
id field_name
1 Age
2 Name
3 Sex
现在,为了通过从table1(即field_id列中的1,2)选取id来显示字段名,我希望field_name的显示顺序与它们各自的id相同,如
预期结果:
id field_id field_name
1 2,1 Name,Age
为了实现上述结果,我编写了以下查询:
select l.id,l.field_id ,string_agg(d.field_name,',') as field_names
from labelprint l
join datafields d on d.id = ANY(string_to_array(l.field_id::text,','))
group by l.id
order by l.id
但是,string_agg()函数会按升序对最终字符串进行排序,并显示如下所示的输出:
id field_id field_name
1 2,1 Age, Name
正如您所看到的,我希望按照field_id值的顺序显示的field_name列中没有维护顺序。
任何建议/帮助都是非常感谢的。
先谢了!
已经在描述中提到了。
2条答案
按热度按时间ru9i0ody1#
虽然这对性能、可读性和可维护性来说可能很糟糕,但您可以动态计算所需的顺序:
你至少应该把你的数组存储为一个实际的数组,而不是一个逗号分隔的字符串。或者可以使用一个中间表,根本不存储数组。
8xiog9wr2#
只需对现有查询进行少量修改,您就可以按如下所示执行操作:
Demo here