From: | Jeff Boes <jeff(at)endpoint(dot)com> |
---|---|
To: | pgsql-admin(at)postgresql(dot)org |
Subject: | Re: outer joins |
Date: | 2005-08-05 21:31:22 |
Message-ID: | 42F3DAAA.4030306@endpoint.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
D Kavan wrote:
> There are 66 project id's in the project table and 3 rows in the
> project_members table for global_id 2915, but it only returns 3. I
> would think it should return 66 rows, with 63 of them having a null
> pm.project_id.
>
> SELECT
> p.project_id, pm.project_id
> FROM project p
> LEFT OUTER JOIN project_members pm ON p.project_id = pm.project_id
> where (pm.project_id is null or pm.global_id = 2915)
>
It would return 66, if all 66 p.project_id's were _missing_ from the set
of pm.project_id's.
A "LEFT JOIN" asks for all the rows in the left-hand table (p), joined
to all the matching or missing rows in the right-hand table (pm). Then
your "WHERE" clause filters all those but the missing ones OR the ones
with global_id 2915.
You need to check on the data with something like:
select distinct project_id from project;
select distinct project_id from project_members;
From | Date | Subject | |
---|---|---|---|
Next Message | Stephan Szabo | 2005-08-05 22:00:24 | Re: outer joins |
Previous Message | Jason Minion | 2005-08-05 20:50:06 | Re: outer joins |