TEACHERS +----------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------+-------------+------+-----+---------+-------+ | name | varchar(50) | NO | | NULL | | | birthyear | smallint(6) | NO | | 0 | | | nationality | varchar(20) | NO | | NULL | | | email | varchar(50) | NO | | NULL | | | aftercare | tinyint(1) | YES | | NULL | | | country_code | varchar(8) | NO | | NULL | | | phone | varchar(22) | NO | | NULL | | | calltime | varchar(40) | NO | | NULL | | | from_time | varchar(4) | NO | | NULL | | | until_time | varchar(4) | NO | | NULL | | | timezone | char(3) | NO | | NULL | | | location | smallint(6) | NO | | NULL | | | status | tinyint(4) | NO | | 0 | | | arrival | date | YES | | NULL | | | gender | varchar(8) | NO | | NULL | | | in_korea | varchar(10) | NO | | NULL | | | inkorea | mediumtext | NO | | NULL | | | university_education | mediumtext | NO | | NULL | | | experience | mediumtext | NO | | NULL | | | introduction | text | NO | | NULL | | | advertise | varchar(50) | NO | | NULL | | | ip | varchar(17) | YES | | NULL | | | recruiter_notes | text | NO | | NULL | | | pic_upload | varchar(60) | NO | | NULL | | | submit_time | timestamp | YES | | NULL | | | start_date | date | NO | | NULL | | | teacher_id | varchar(36) | NO | PRI | NULL | | | recruiter | varchar(20) | YES | | NULL | | | date_of_birth | date | YES | | NULL | | +----------------------+-------------+------+-----+---------+-------+ 29 rows in set (0.10 sec) SENT MATCH +------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+-------------+------+-----+---------+-------+ | teacher_id | varchar(36) | NO | | NULL | | | job_id | varchar(36) | NO | | NULL | | | teacher_response | tinyint(1) | YES | | NULL | | | job_response | tinyint(1) | YES | | NULL | | | teacher_notes | text | NO | | NULL | | | job_notes | text | YES | | NULL | | | deleted | tinyint(1) | NO | | 0 | | | success | tinyint(4) | NO | | 0 | | +------------------+-------------+------+-----+---------+-------+ 8 rows in set (0.02 sec) SCHOOL JOBS: +---------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------------+--------------+------+-----+---------+-------+ | contact | varchar(19) | NO | | NULL | | | school | varchar(29) | NO | | NULL | | | arrival | date | YES | | NULL | | | recruiter_notes | text | NO | | NULL | | | email | varchar(40) | NO | | NULL | | | phone | varchar(40) | NO | | NULL | | | foreign_teacher | varchar(200) | NO | | NULL | | | school_description | text | NO | | NULL | | | postal_address | varchar(200) | NO | | NULL | | | city | smallint(6) | NO | | 0 | | | website_address | varchar(40) | NO | | NULL | | | ticket_money | tinyint(1) | NO | | 0 | | | accomodation | tinyint(4) | NO | | 0 | | | salary | smallint(6) | NO | | 0 | | | kindergarten | tinyint(1) | NO | | 0 | | | elementary | tinyint(1) | NO | | 0 | | | middle_school | tinyint(1) | NO | | 0 | | | high_school | tinyint(1) | NO | | 0 | | | adults | tinyint(1) | NO | | 0 | | | number_teachers | tinyint(4) | NO | | 0 | | | teacher_description | text | NO | | NULL | | | gender | varchar(4) | NO | | NULL | | | contract | varchar(60) | NO | | NULL | | | picupload | varchar(60) | NO | | NULL | | | status | smallint(6) | NO | | 0 | | | school_jobs_id | varchar(36) | NO | PRI | NULL | | | calendar_date | varchar(10) | NO | | NULL | | +---------------------+--------------+------+-----+---------+-------+ 27 rows in set (0.00 sec) QUERY: this is a matching query me a list of all the teachers and the schools that match the criteria and that haven't already been sent. I want be able to exclude the matches in sent_match that correspond to the same teacher_id and job_id ... which would indicate that they have already been sent. SELECT teachers.name, school_jobs.school FROM teachers LEFT JOIN school_jobs ON ( teachers.location = school_jobs.city OR teachers.location = -1 ) WHERE teachers.status != -1 AND school_jobs.status != -1 AND ( teachers.arrival BETWEEN DATE_SUB( school_jobs.arrival, INTERVAL 20 DAY ) AND DATE_ADD( school_jobs.arrival, INTERVAL 20 DAY )) ;