这篇文章主要介绍了postgres array_to_string和array的用法讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。
有三张表,分别如下:
1select * from vehicle
1select * from station
1select * from vehicle_station
需求:
vehicle和station表示多对多的关系,需要把vehicle表对应的station表的第二字段查出来放到一个字段,如果对应多条,用逗号隔开放到一个字段。
解决方案:
1SELECT v.*, array_to_string(ARRAY (SELECT station_name FROM station WHERE ID IN (SELECT station_id FROM vehicle_station WHERE vehicle_id = v. ID)),',') station_names FROM vehicle v
结果如下:
补充:Postgres array 数组类型详细使用
德哥这篇文章写的很不错,在相关函数部分,尤其是 array_upper,array_lower 部分,有我自己的一些解释。
ARRAY类型包含几个重要的特征
维度
也就是几维数组, 不管怎么赋值, ARRAY最终必须是个矩阵.
例1 :
ARRAY[1,2,3,4] 是一维数组,
ARRAY[[1,2],[3,4],[5,6]] 是二维数组
例2 :
ARRAY[['digoal','zhou'],['a','b',c']] 是错误的. 因为第二个维度中的第一个array有2个元素, 而第二个array有3个元素. 不是一个矩阵. 个数必须一致.
同时类型也必须一致
例3 :
ARRAY[['digoal','zhou'],[1,2]] 是错误的. 因为['digoal','zhou']是text[]类型, 而[1,2]是int[]类型.
元素
一维数组ARRAY[1,2,3,4] 中的4个元素分别是 1, 2, 3, 4. 这些int型的值.
二维数组ARRAY[[1,2],[3,4],[5,6]] 中的第一维度有3个元素是 ARRAY[1,2] , ARRAY[3,4] , ARRAY[5,6] 这些int[]类型的值. 第二个维度的第一个subscript的元素有两个, 分别是1,2 . 第二个subscript 分别是3,4. 第三个subscript分别是5,6.
元素之间的分隔符, 除了box类型是分号;, 其他类型的分隔符都是逗号,.
扩展性
一维数组可以扩展, 二维数组无法扩展.
subscript访问ARRAY中的元素需要提供subscript值. 默认是从1开始编号. 除非赋值的时候强制指定subscript
例1 :
ARRAY[[1,2],[3,4],[5,6]] as a
a[1][1] = 1;
a[1][2] = 2;
a[2][1] = 3;
a[2][2] = 4;
a[3][1] = 5;
a[3][2] = 6;
a第一个[]表示第一维度, 里面的数字代表第一维度中要访问的subscript,
a第二个[]表示第二维度, 里面的数字代表第二维度中要访问的subscript,
另外也可以访问ARRAY的slice.
例2 :
1a[1:2][1:1] = {{1},{3}}
第一个[]中的1表示低位subscript, 2表示高位subscript值.