H2数据库:从子查询中获取行作为数组

时间:2016-01-20 15:23:13

标签: java sql arrays h2

我有一个适用于PostgreSQL的查询,我需要在H2Database上使用它。 表的重要性基本上只是一个id整数字段。 PostgreSQL上的示例查询结果如下: 选择id, array_to_string(     数组(从table1中选择id) '&#39) 来自table2 按ID排序 结果: id | array_to_string 2 | 1,3,4,5,2 3 | 1,3,4,5,2 4 | 1,3,4,5,2 6 | 1,3,4,5,2 7 | 1,3,4,5,2 8 | 1,3,4,5,2 9 | 1,3,4,5,2 10 | 1,3,4,5,2 对于H2,我实现了用户定义的函数array_to_string和数组,如下所示: 公共类H2Functions {     public static String arrayToString(final Object [] array,final String separator){         return StringUtils.join(array,separator);     }     public static Object array(final Object row){         返回" ???&#34 ;;     } } 问题是我无法实现数组,因为我不知道它通过了什么。 查询失败: 标量子查询包含多行; 我怎样才能说服H2返回哪些数组可以使用?

2 个答案:

答案 0 :(得分:2)

您并不希望将这些行作为数组,您希望将它们作为逗号分隔列表。并且array_to_string( array(select id from table1),',')在Postgres中开始时是不必要的复杂化。它可以简化为

select id, 
       (select string_agg(id::text, ',') from table1) as id_list
from table2
order by id

这表明你可以简单地使用H2 group_concat(),这相当于Postgres' string_agg()

select id, 
       (select group_concat(id separator ',') from table1) as id_list
from table2
order by id

答案 1 :(得分:1)

自1.4.197 H2版本以来,该值也将值聚合到一个数组函数ARRAY_AGG中。
参见https://www.h2database.com/html/functions-aggregate.html#array_agg