Re: sql question - Mailing list pgsql-general

From Ed Loehr
Subject Re: sql question
Date
Msg-id 38342B46.C65ADF61@austin.rr.com
Whole thread Raw
In response to sql question  (Herbert Liechti <Herbert.Liechti@thinx.ch>)
List pgsql-general
> Date: Wed, 17 Nov 1999 20:53:33 +0100
> From: Herbert Liechti <Herbert.Liechti@thinx.ch>
> Subject: sql question
>
> I have a sql problem which I can't solve. The following table is defined
>
> create table AdressGroup
> (
>    AdrGroup_Id                     INTEGER       NOT NULL
>          DEFAULT NEXTVAL('adrverw_id_seq'),
>    Zeit                            DATETIME      NOT NULL,
>    Group_Id                        INTEGER       NOT NULL,
>    Adress_Id                       INTEGER       NOT NULL
> );
>
> The table assigns adresses to adressgroups.
>
> I'd like to select the adresses which belongs to one specific adressGroup and to no other group. If an adress has
morethan one entry in the AdressGroup 
> table it should not be in the projection.
>
> I tried the following:
>
> SELECT * FROM adressGroup
>  WHERE Group_Id = 6
>    AND EXISTS( SELECT AdrGroup_Id FROM adressGroup ag_alias
>                 WHERE adressGroup.AdrGroup_Id = ag_alias.AdrGroup_Id
>                 GROUP BY AdrGroup_Id HAVING COUNT(*) == 1 );
>
> When I do this I get the following error:
>   ERROR:  rewrite: aggregate column of view must be at rigth side in qual
>   ERROR:  rewrite: aggregate column of view must be at rigth side in qual
>
> Does anybody knows the solution? Thanks
>

Not sure about the error above, other than the apparent typos with "adressGroup", but I think you can get what you're
afterwith this: 

SELECT *
FROM AdressGroup ag
WHERE ag.Group_Id = 6 AND NOT EXISTS (
    SELECT AdrGroup_Id
    FROM AddressGroup ag2
    WHERE ag2.AdrGroup_Id = ag.AdrGroup_Id AND ag2.Group_Id <> 6);

Hope that helps.

Ed


pgsql-general by date:

Previous
From: Manuel Weindorf
Date:
Subject: Problem with C functions ?
Next
From: Miguel Montes
Date:
Subject: Problems with datetime