Assuming that you *don't* want ALL purchases made prior to the range, but only those of subjects not purchased recently, the following query appears to work:
-- First gather info about recent purchases Create TEMPORARY Table recent SELECT B.id, B.date_purch, S.subj FROM subj as S INNER JOIN book as B ON S.book_id = B.id -- Last 6 months: WHERE B.date_purch >= DATE_ADD(CURRENT_DATE(), INTERVAL -6 MONTH); -- Then do an outer join with ALL purchases SELECT B.id, B.date_purch, S.subj FROM subj as S INNER JOIN book as B ON S.book_id = B.id LEFT OUTER JOIN recent as R ON R.subj = S.subj -- but list only those with no recent purchases: WHERE R.id IS NULL; If you only want the subjects returned (and once each), remove B.id and B.date_purch from the (2nd) SELECT list, and include a DISTINCT. As a MySQL newbie, I couldn't get it to work as a single statement which "logically" (AFAIK) should have returned the same data on 4.0 (returned no result on 4.0, gave error on 3.23): SELECT B.id, B.date_purch, S.subj FROM subj as S INNER JOIN book as B ON S.book_id = B.id LEFT OUTER JOIN (book as B2 INNER JOIN subj as S2 ON S2.book_id = B2.id AND B2.date_purch >= DATE_ADD(CURRENT_DATE(), INTERVAL -6 MONTH) ) ON S2.subj = S.subj WHERE B2.id IS NULL Is there a restriction, quirk, or bug in MySQL that prevents parenthesised joins from working properly? HTH, Tore. ----- Original Message ----- From: "Jesse Sheidlower" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, February 24, 2003 8:09 PM Subject: Select based on related date > > I'm having trouble with a query that I thought would be pretty > straightforward. To simplify, I have a database of books that > has, say, two tables: > > CREATE TABLE book ( > id INT, > date_purch DATE > ) > > CREATE TABLE subj ( > book_id INT, > subj TEXT > ) > > Each book can have any number of subjects, and each book has > at least one subject. > > I'd like to get all subjects that are in the subject table > that are _not_ represented in a particular date range. For > example, if I have bought books with subjects 'Computing', > 'Cooking', 'Baseball', and 'Fiction', but in the last six > months I have only bought Fiction and Baseball, I'd like a > query that will give me Computing and Cooking. > > I played around with a few LEFT JOINS but I still seem to be > missing something. > > Thanks. > > Jesse Sheidlower > > > --------------------------------------------------------------------- > Before posting, please check: > http://www.mysql.com/manual.php (the manual) > http://lists.mysql.com/ (the list archive) > > To request this thread, e-mail <[EMAIL PROTECTED]> > To unsubscribe, e-mail <[EMAIL PROTECTED]> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php