我尝试获取标记行列表并将其作为CSV添加到列中。我认为子查询适合使用string_agg。在eventstags下面是一个多对多表,将标签与其事件相关联。
(SELECT string_agg(name, ',') FROM tags WHERE tags.id IN (SELECT eventstags.tags_id WHERE eventstags.events_id = events.id)) AS tags
这似乎只返回一个标记,就好像它忽略了所有其他标记行一样。知道如何让IN查询知道其他行,以便将标记名称连接成CSV列吗?
我使用psycopg2和Postgres 9.5
答案 0 :(得分:0)
创建agregate:
CREATE AGGREGATE str_sum(text) (
SFUNC=strcat,
STYPE=text,
INITCOND=''
);
和功能:
CREATE OR REPLACE FUNCTION strcat(text, text)
RETURNS text AS
$BODY$
begin
if $1 = '' then
return $2;
else
return ( $1 || ', ' ) || $2;
end if;
end;
$BODY$
LANGUAGE plpgsql STABLE
并在子查询中使用str_sum:
SELECT str_sum(name) FROM tags