• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

高分请问PostgreSQL中的集合查询有关问题

mysql 搞代码 7年前 (2018-06-02) 137次浏览 已收录 0个评论

高分请教PostgreSQL中的集合查询问题
现有项目需要把oracle转成PostgreSQL,
比如现有table及数据如下:

>>表A
depid userid

d1 1111
d1 2222
d1 3333
d2 4444
d2 5555
d2 6666

在oracle中可以自定义一个数值型table的type,
然后通过cast ( multiset 。。。)的方式得到
类似下面的查询结果。

d1 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为1111,2222,3333
d2 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为4444,5555,6666

现在PostgreSQL中好像没有multiset这个函数,请问各位该如何实现等同于oracle相同的效果。
若没有系统自带的函数能够实现,自定义函数实现亦可,只是要求是要用1条sql语句实现。

要实在没有类似oracle中的自定义table的返回形式,返回值变成numeric[]数组也可以。

比如:
d1 {1111,2222,3333}
d2 {4444,5555,6666}

请熟悉PostgreSQL的各位大侠赐教。。。

——解决方案——————–
啊哦 我是学mysql的 
数据量很多么? 如果不多 你把数据从oracle中导出成一个表 在PostgreSQL建表了在导进去
这样应该很快吧
——解决方案——————–
mysql有这个函数 sqlserver和pg都没有 需要写函数
http://blog.csdn.net/starnight_cbj/article/details/7513863
——解决方案——————–
就是将
depid userid

d1 1111
d1 2222
d1 3333
d2 4444
d2 5555
d2 6666

变成:
1111,2222,3333
4444,5555,6666?

——解决方案——————–
如果你的版本支持的话,可以试下array_agg()或string_agg()函数。
——解决方案——————–
除了UDF、SP外,只有用数组函数
——解决方案——————–
除了UDF、SP外,只有用数组函数
——解决方案——————–
2楼的方法不错ing.
——解决方案——————–
6 楼方法可以采用,可以得到下面格式:
d1 {1111,2222,3333}
d2 {4444,5555,6666}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:高分请问PostgreSQL中的集合查询有关问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址