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

菖蒲老先生 2012-06-06 04:15:24
现有项目需要把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的各位大侠赐教。。。

...全文
303 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuan_myg 2012-06-08
  • 打赏
  • 举报
回复
6 楼方法可以采用,可以得到下面格式:
d1 {1111,2222,3333}
d2 {4444,5555,6666}
菖蒲老先生 2012-06-07
  • 打赏
  • 举报
回复
最好变成
d1 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为1111,2222,3333
d2 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为4444,5555,6666

实在不行变成
d1 {1111,2222,3333}
d2 {4444,5555,6666}

不能单纯的用符号把这几项连接起来,
因为可能有varchar型,用符号连接可能导致溢出。

[Quote=引用 4 楼 的回复:]

就是将
depid userid

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

变成:
1111,2222,3333
4444,5555,6666?
[/Quote]
WWWWA 2012-06-07
  • 打赏
  • 举报
回复
就是将
depid userid

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

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

iihero_ 2012-06-07
  • 打赏
  • 举报
回复
2楼的方法不错ing.
WWWWA 2012-06-07
  • 打赏
  • 举报
回复
除了UDF、SP外,只有用数组函数
WWWWA 2012-06-07
  • 打赏
  • 举报
回复
除了UDF、SP外,只有用数组函数
long1867 2012-06-07
  • 打赏
  • 举报
回复
如果你的版本支持的话,可以试下array_agg()或string_agg()函数。
菖蒲老先生 2012-06-06
  • 打赏
  • 举报
回复
我刚查了下,其实用 array(select userid from tablea)
大概就能满足要求了,看还有没有直接查询成子表而非数组的。
rucypli 2012-06-06
  • 打赏
  • 举报
回复
mysql有这个函数 sqlserver和pg都没有 需要写函数
http://blog.csdn.net/starnight_cbj/article/details/7513863
小小小小蜗牛 2012-06-06
  • 打赏
  • 举报
回复
啊哦 我是学MYSQL的
数据量很多么? 如果不多 你把数据从oracle中导出成一个表 在PostgreSQL建表了在导进去
这样应该很快吧

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧