Re: Left Outer Join Question
От | Stephan Szabo |
---|---|
Тема | Re: Left Outer Join Question |
Дата | |
Msg-id | 20020226224431.K98706-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | Left Outer Join Question (Edward Murray <mail@avenuedesign.net>) |
Список | pgsql-sql |
On Wed, 27 Feb 2002, Edward Murray wrote: > I seem to have reached the limits of my (postgres)SQL knowledge. If > anybody could help me out of this predicament it would be greatly > appreciated. I know the explanation of this problem may seem a bit complex > but I am hoping the answer may be quite simple. > > I have items represented for sale on a web-site. I have a number of > sections which each have sub-categories under them and each category may > contain items. > > Each item is posted by a shop with a client number. > > I am trying to list the sub-categories of a section and the number of > items posted in by a particular shop in each of those categories. > > Simplified versions of the tables are as such: > > sections ( > recordnum int > name varchar > ) > > category ( > recordnum int > name varchar > ) > > > > section_subcats ( > sectionum int > catnum int > ) > > items ( > recordnum int > catnum int > clientnum int > name varchar > ) > > The categories are assigned to the sections via the Section_subcats table > using data in the tables as such: > > > section > 1 Fruit > > category > 1 Apple > 2 Pear > 3 Orange > > > section_subcats > 1 1 > 1 2 > 1 3 > > items > 1 1 333 'Jonathan' > 2 1 333 'Fuji' > 3 1 444 'Granny Smith' > I am trying to construct a query which will return something like the > following for clientnum 333: > > > Fruit > ----- > Apple 2 > Pear 0 > Orange 0 > > I have tried the following query but the results with no items are > excluded: > > select category.name, count(items.recordnum) from category left outer join > items on (category.recordnum = items.catnum) where category.recordnum = > section_subcats.catnum and section_subcats.sectionnum = 1 and > items.clientnum = 333 group by category.name; Well, IIRC, by testing items.clientnum=333 you're getting rid of the outerness of the join since those will be NULL in the rows so you're just throwing them back out. Maybe: select category.name, count(foo.recordnum) from category inner join section_subcats on (category.recordnum=section_subcats.catnum) left outer join (select * from items where clientnum=333) foo on (category.recordnum=foo.catnum) where section_subcats.sectionnum=1 group by category.name;
В списке pgsql-sql по дате отправления: