0

我正在尝试将 group_concat 函数添加到 hsqldb 以便我可以正确地将查询作为单元/集成测试进行测试。该查询在 mysql 中运行良好,因此我需要它在 hsqldb 中运行(希望如此)。

        // GROUP_CONCAT
        jdbcTemplate.update("DROP FUNCTION GROUP_CONCAT IF EXISTS;");
        jdbcTemplate.update(
            "create aggregate function group_concat(in val varchar(100), in flag boolean, inout buffer varchar(1000), inout counter int) " +
            "   returns varchar(1000) " +
            "   contains sql " +
            "begin atomic " +
            "   if flag then" +
            "      return buffer;" +
            "   else" +
            "      if val is null then return null; end if;" +
            "      if buffer is null then set buffer = ''; end if;" +
            "      if counter is null then set counter = 0; end if;" +
            "      if counter > 0 then set buffer = buffer || ','; end if;" +
            "      set buffer = buffer + val;" +
            "      set counter = counter + 1;" +
            "      return null;" +
            "   end if;" +
            "end;"
        );

添加这个聚合函数可以解决大部分问题。它将正确地表现得像 mysql 的 group_concat。但是,它不会让我像这样使用 distinct 关键字:

group_concat(distinct column)

有没有办法考虑不同的关键字?或者我是否重写查询以完全避免 distinct 关键字?

4

1 回答 1

0

HSQLDB 有内置的 GROUP_CONCAT 并接受 DISTINCT。

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_aggregate_funcs

目前,您无法将 DISTINCT 添加到用户定义的聚合函数中,但这看起来是一个有趣的功能,将来会允许使用。

于 2012-10-18T21:14:24.143 回答