2017-10-16 175 views
3

我有这样的Postgres表:对PostgreSQL的HSQL

CREATE TABLE News (
    tags  text[](10), 
    contract varchar(40), 
    ...others 
); 

我需要得到所有不同的标签给定的合同。我发现PostgreSQL的请求,效果很好:

SELECT array_agg(acc) 
FROM (
     SELECT DISTINCT unnest(tags::text[]) 
     FROM my_schema.news 
     WHERE contract = 'acontract' 
    ) AS dt(acc); 

由于我使用的弹簧数据的JPA,我尝试这个请求转换为HSQL的要求,但我不能使它发挥作用。有关转换可能是什么的想法?

+1

在HSQLDB,使用 “组数据库的SQL语法PGS真”(或等效的URL属性sql.syntax_pgs = TRUE),以确保PostgreSQL的非标准功能。对SERIAL,BIGSERIAL,TEXT和UUID数据类型以及序列函数的引用被转换为HyperSQL等价物。请注意,HSQLDB确实支持数组类型,但是PostgreSQL的数组实现不同于SQL标准。 – scottb

回答

1

除了SET DATABASE SQL SYNTAX PGS TRUE之外,还需要根据SQL标准引用数组。

CREATE TABLE News (tags text array[10], contract varchar(40)) 

然后

select array_agg(acc) from (
    select distinct acc from news, unnest(tags) un(acc) 
    WHERE contract = 'acontract' 
)