From: | John Sidney-Woollett <johnsw(at)wardbrook(dot)com> |
---|---|
To: | tony <tony(at)tgds(dot)net> |
Cc: | postgres list <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: problem with distinct rows |
Date: | 2005-03-08 10:00:22 |
Message-ID: | 422D77B6.6010201@wardbrook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
If the created_by table includes an artist number/position to indicate
the first, second artist etc, eg
create table created_by (
work_id integer,
artist_id integer,
position integer,
primary key (work_id, artist_id, position)
);
then you can simply use the following query
select a.artist_name, w.title, w.inventory_number
from artist a, works w, created_by cb
where w.work_id = cb.work_id
and a.artist_id = cb.artist_id
and cb.position = 1
order by a.artist_name, w.title;
If you don't have a position or similar field in the created_by table,
you will have more difficulty as you're finding.
An alternative approach is to create a function which arbitrarily
returns one artist name for a work, and then sort on that but it wont be
as efficient.
select artist_name, title, inventory_number from (
select GetArtistName(w.inventory_number) as artist_name, w.title,
w.inventory_number
from works w
) as t
order by artist_name, title
BTW, I haven't checked any of this, but hopefully it will give you some
pointers or ideas.
John Sidney-Woollett
tony wrote:
> Hello,
>
> I am having a problem with returning distinct rows this is probably a
> newbie question but here goes:
>
> Tables are artist, created_by and works
> the join is on created_by.work_id and created_by.artist_id
>
> A work of art can have two or more artists listed as creators in created
> by. In the inventory lists we don't care we only need one reference to
> each work AND (this is the part that hurts) they must be ordered
> alphabetically by the _first_ artists name.
>
> example:
> artist_name : title : inventory_number
> Bernadette Genée et Alain Le Borgne : Pièce à conviction : 004090101
>
> Should be after "F" and before "H"
>
> But if I do DISTINCT ON inventory_number I must order by
> inventory_number then artist_name which totally defeats my purpose. I
> have also played with GROUP BY and HAVING which
>
> Clues much appreciated
>
> Tony Grant
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match
From | Date | Subject | |
---|---|---|---|
Next Message | Martijn van Oosterhout | 2005-03-08 10:04:30 | Re: problem with distinct rows |
Previous Message | FERREIRA William (COFRAMI) | 2005-03-08 09:43:54 | iterate over refcursor |