Re: exclusion query - Mailing list pgsql-sql

From Louis-David Mitterrand
Subject Re: exclusion query
Date
Msg-id 20080925200625.GA12145@apartia.fr
Whole thread Raw
In response to Re: exclusion query  ("Oliveiros Cristina" <oliveiros.cristina@marktest.pt>)
List pgsql-sql
On Thu, Sep 25, 2008 at 02:11:23PM +0100, Oliveiros Cristina wrote:
> Hi, Louis-David,
>
> I guess you already have your problem solved, but just for the sake of  
> curiosity, another
> way to do it might be to tweak a little your original query, I've written 
> on Capitals the things I've added.
> Should you need to exclude more than one event you can add the conditions 
> to the commented line (ORed )

That LEFT JOIN + GROUP BY trick is wicked! :-) I spent the last half 
hour struggling to understand it. You solution is a great learning tool 
and you obviously know your way around SQL.

Thanks!

> Best,
> Oliveiros
>
> select distinct pt.type
> from person_type pt
> natural join person_to_event
> join event e using (id_event)
> LEFT JOIN event e2
> ON e.id_event = e2.id_event
> AND e2.id_event=219     -- put here the id of the event you wanna exclude
> join event_type et
> ON e.id_event_type = et.id_event_type
> where et.type_fr='théâtre'
> GROUP BY pt.type_fr
> HAVING SUM(e2.id_event) IS NULL;
>
> ----- Original Message ----- From: "Louis-David Mitterrand" 
> <vindex+lists-pgsql-sql@apartia.org>
> To: <pgsql-sql@postgresql.org>
> Sent: Tuesday, September 23, 2008 9:18 AM
> Subject: Re: [SQL] exclusion query
>
>
>> On Mon, Sep 22, 2008 at 09:39:08AM -0700, Mark Roberts wrote:
>>>
>>> Taking your second email into account, I came up with:
>>>
>>> select distinct pt.type_fr
>>> from person_to_event pte
>>>     inner join person_type using (id_person_type)
>>> where id_person_type in (
>>>     select id_person_type
>>>     from person_to_event pte
>>>         inner join event using (id_event)
>>>         inner join event_type using (id_event_type)
>>>     where type_fr = 'theatre'
>>> ) and id_person_type not in (
>>>     select id_person_type
>>>     from person_to_event
>>>     where id_event = 219
>>> )
>>>
>>> I feel like there's a solution involving group by tugging at the back of
>>> my mind, but I can't quite put my finger on it.  Sorry if this isn't
>>> quite what you're asking for.
>>
>> Hi,
>>
>> That works very nicely (with minor adaptations).
>>
>> I also had that solution-without-a-subselect in the back of my mind but
>> this does the job just fine!
>>
>> Cheers,
>>
>> -- 
>> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-sql
>>
>
>
> -- 
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql


pgsql-sql by date:

Previous
From: "Oliveiros Cristina"
Date:
Subject: Re: exclusion query
Next
From: James Kitambara
Date:
Subject: Problem with pg_connect() in PHP