Re: Querying many to many relations

Поиск
Список
Период
Сортировка
От Frank Bax
Тема Re: Querying many to many relations
Дата
Msg-id 5.2.1.1.0.20070210192251.009fb7d0@pop6.sympatico.ca
обсуждение исходный текст
Ответ на Querying many to many relations  (A Gilmore <agilmore@shaw.ca>)
Список pgsql-novice
At 02:28 PM 2/10/07, A Gilmore wrote:
>I need to run a query that retrieves all rows in a table and passes off
>the information to another app, it involves a many-to-many relation, that
>I'm handling with a subselect.  Obviously this is costly, I was wondering
>if anyone has better way of approaching this problem that would allow me
>to avoid the subselect.
>
>SELECT id,name,ahref,array_to_string(array(SELECT links_categories.cid
>FROM links_categories WHERE links_categories.lid = id), ':') AS categories
>FROM links;


This does not appear to be a many-to-many relation.  For one link there are
many categories; that makes a one-to-many relation.


>The problem is my app needs to create an XML entry for each link row that
>contains all applicable category IDs.  Can I create a similar query while
>avoiding the subselect?


I don't see the subselect as a problem.  Try using the array_accum function
from this page:
http://www.postgresql.org/docs/8.2/interactive/xaggr.html

Then you can rewrite your query as

select id,name,ahref,cids from links left join (select lid,array_accum(cid)
as cids from links_categories group by lid) as categories on id=lid;

If you tinker with the aggregate function, perhaps you can include your XML
in there?


В списке pgsql-novice по дате отправления:

Предыдущее
От: A Gilmore
Дата:
Сообщение: Querying many to many relations
Следующее
От: Jan Danielsson
Дата:
Сообщение: Selecting non-existing rows?