Re: weird structure

From: Yury Don <yura(at)vpcit(dot)ru>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: weird structure
Date: 2000-08-28 03:49:00
Message-ID: 39A9E12C.CE30AB78@vpcit.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Renato De Giovanni wrote:
>
> > > Consider the following tables/fields:
> > > table "person": fields "p_id", "p_name".
> > > table "person_attribute": fields "a_id", "a_name".
> > > table "person_data": fields "d_person_id", "d_attribute_id",
> > > "d_value".
> > >
> > > Also consider that a person may not have data related to all possible
> > > attributes.
> > >
> > > Using this structure, how could I retrieve in one row with a single
> > > select statement all attributes from a person (showing null to
> > > attributes that were not registered to him)?
> > >
> > > Thanks for any suggestion,
> > > --
> > > Renato
> > > Sao Paulo - SP - Brasil
> > > rdg(at)viafractal(dot)com(dot)br
> >
> > I did similar things using the following technique:
> > in frontend I gather all attributes from person_attribute and then
> > generate a query like this:
> >
> > select *, (select distinct d_value from person_data where d_person_id =
> > person.p_id and
> > d_attribute_id = 'here first attribute id'), (select distinct d_value
> > from person_data where d_person_id = person.p_id and d_attribute_id =
> > 'here second attribute id'), ... from person
> > --
> > Sincerely yours,
> > Yury
>
> Yury...
> That worked perfectly! Thank you very much!
>
> Tell me, I've never seen this sql construction before, is it specific to
> postgres? Or should it also work on other databases?
>
> And is there any relevant performance issue considering this kind of
> database schema and its peculiar sql commands?
>
> Thanks again!
> --
> Renato
> Sao Paulo - SP - Brasil
> rdg(at)viafractal(dot)com(dot)br

This construction works in any database which support subselect in
target list in "select" statement, for example I used this in Interbase.
What about performance - it strongly depends on amount of attributes. In
order to maximize it you need to create indexes on all fields which
participate in "where" clause - p_id, d_person_id, d_attribute_id. And
performance .

--
Sincerely yours,
Yury

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message John McKown 2000-08-28 03:57:56 Re: Select subset of rows
Previous Message J. Fernando Moyano 2000-08-27 23:42:03 Complex query