Re: Denormalizing during select
От | Josh Berkus |
---|---|
Тема | Re: Denormalizing during select |
Дата | |
Msg-id | 200302251024.19249.josh@agliodbs.com обсуждение исходный текст |
Ответ на | Re: Denormalizing during select (Jeff Boes <jboes@nexcerpt.com>) |
Список | pgsql-sql |
Jeff, > > I have two tables (A and B) in a one-to-many relationship. When > > retrieving data from one table (A), I need to denormalize the tables > > during a select so that values of a column in the many table (B) appear > > as a list in one field of the output. > > Well, the straightforward way to do this would be with a function: Actually, it's much easier to do this using a custom aggregate: CREATE FUNCTION "comma_cat" (text,text) RETURNS text AS ' SELECT CASE WHEN $2 IS NULL OR $2 = '''' THEN $1WHEN $1 IS NULL OR $1 = '''' THEN $2ELSE $1 || '', '' || $2END ' LANGUAGE 'sql'; CREATE AGGREGATE comma_list ( BASETYPE = text, SFUNC = comma_cat, STYPE = text, INITCOND = '' ); SELECT a.id, a.col1, a.col2, comma_list(b.text) FROM a JOIN b on a.id = b.a_id GROUP BY a.id, a.col1, a.col2 The only drawback of this approach is that you cannot order the items in the list, but it is *much* faster than the function method that Jeff outlined. -- -Josh BerkusAglio Database SolutionsSan Francisco
В списке pgsql-sql по дате отправления: