Richard Reina <[EMAIL PROTECTED]> wrote on 01/07/2005 03:31:26 PM:

> I am having trouble with a query that gives me
> activities that have not been "written up" but if
> these activities are a party they whould only appear
> in the query if they have been held, hence date will
> not='0000-00-00'
> 
> If I write the query as so, no non-party activities
> will show up because the foreign key P_ID will be null
> and not match the p.ID.
> 
> SELECT a.description
> FROM activity a, party p 
> WHERE a.write_up IS NULL
> AND a.P_ID=p.ID 
> AND p.date!="0000-00-00"; 
> 
> IF I allow for a.P_ID null with logical OR (like so
> )it's a mess
> 
> SELECT a.description
> FROM activity a, party p 
> WHERE a.write_up IS NULL
> AND ((a.P_ID=p.ID AND p.date!="0000-00-00")
> OR a.P_ID IS NULL)); 
> 
> Any help on how I can get this to work would be
> greatly appreciated.
> 
> Richard
> 
> 

You need an OUTER JOIN not the implicit INNER JOIN you form by using the 
comma to separate the table names

SELECT a.description
FROM activity a
LEFT JOIN party p 
        ON AND a.P_ID=p.ID 
WHERE a.write_up IS NULL
AND (p.date!="0000-00-00"
        OR a.P_ID IS NULL)

That will give you all records from activity that meets these conditions:
        a) it wasn't a party
        or b) it was a party and the party's date is not "0000-00-00"

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to