Martin, you are correct in how you determine when to use AND and when to 
use OR, but that's not what the original query was trying to find.... If 
you re-read his original post,  he wants this query:

SELECT Applicants.AppID,
        Applicants.Name,
        Applicants.Email
FROM ApplicantStatus
INNER JOIN Applicants 
        ON Applicants.AppID = ApplicantStatus.AppID
WHERE ApplicantStatus.Active = 1
        AND ApplicantStatus.SCode = '####';

with two additional columns containing information from the "reviews" 
table. BUT! he only wants those columns populated if the reviewer was 
reviewer #2. That's why Harald's answer is correct.

To repeat Harald's answer:

SELECT Applicants.AppID, Applicants.Name, Applicants.Email,
   Reviews.Quant, Reviews.Qual
   FROM ApplicantStatus
   INNER JOIN Applicants ON Applicants.AppID = ApplicantStatus.AppID
   LEFT JOIN Reviews ON Reviews.AppID = Applicants.AppID
                    AND ReviewerID = 2
   WHERE ApplicantStatus.Active = 1
   AND ApplicantStatus.SCode = '####';

With the ReviewerID condition into the ON clause of the LEFT JOIN (and not 
as a condition in the WHERE clause), the query will not join ANY row from 
"reviews" for  ANY OTHER reviewer except #2. Good call Harald!

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

"Martin Gainty" <[EMAIL PROTECTED]> wrote on 10/13/2004 10:13:46 AM:

> A SQL AND is a restrictive filter
> In other words
> Your resultset will yield results based on how you structure your query
> If you structure your resultset which includes only applicants who have 
been
> seen by "Reviewer2" then state
> SELECT ... FROM
> WHERE (CONDITION1 AND Applicant.Reviewer = 'Reviewer2')
> If you want applicants which includes ALL reviewers INCLUDING those who 
have
> been seen by Reviewer2
> SELECT ... FROM
> WHERE (CONDITION1 OR Applicant Reviewer='Reviewer2')
> HTH,
> Martin
> To some extent.. sanity is a form of conformity..
> ~John Nash PhD~
> ----- Original Message -----
> From: "Harald Fuchs" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Wednesday, October 13, 2004 8:37 AM
> Subject: Re: Q: outer join w/restriction
> 
> 
> > In article
> 
<[EMAIL PROTECTED]>,
> > "Christopher J. Mackie" <[EMAIL PROTECTED]> writes:
> >
> > > There's something I'm not getting about how to put a SELECT 
restriction
> on a query with an outer join.  The following query:
> > > SELECT Applicants.AppID, Applicants.Name, Applicants.Email,
> > > Reviews.Quant, Reviews.Qual
> > > FROM ApplicantStatus
> > > INNER JOIN Applicants ON Applicants.AppID = ApplicantStatus.AppID
> > > LEFT JOIN Reviews ON Reviews.AppID = Applicants.AppID
> > > WHERE ApplicantStatus.Active = 1
> > > AND ApplicantStatus.SCode = '####'
> >
> > > AND C.Reviewer.ID = 2;
> >
> > > returns only Applicants who have reviews from Reviewer # 2.  What I 
want
> is *all* applicants who meet the other two criteria (Active, and SCode
> =...), and *any* reviews by Reviewer 2 for any of those applicants (if
> Reviewer 2 hasn't written for Applicant a, then a should still be in the
> result set, but with the Reviews.* columns as NULL).
> >
> > > When I remove the final "ReviewerID = 2" restriction, all of the 
right
> applicants are in the dataset--but with a lot of extra rows due to 
reviews
> by other reviewers.  How do I get rid of Reviewers {1, 3...n}, without
> losing all the applicants who've never met Reviewer #2?
> >
> > If "C.Reviewer.ID" is a typo for "Reviews.ReviewerID", the solution is
> > simple:
> >
> >   SELECT Applicants.AppID, Applicants.Name, Applicants.Email,
> >   Reviews.Quant, Reviews.Qual
> >   FROM ApplicantStatus
> >   INNER JOIN Applicants ON Applicants.AppID = ApplicantStatus.AppID
> >   LEFT JOIN Reviews ON Reviews.AppID = Applicants.AppID
> >                    AND C.Reviewer.ID = 2
> >   WHERE ApplicantStatus.Active = 1
> >   AND ApplicantStatus.SCode = '####';
> >
> >
> > --
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
> >
> >
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> 

Reply via email to