MySQL ВЫБИРАЕТ строки, если они не существуют, или если существуют, выполняют условия

#mysql #sql

Вопрос:

У меня возникли проблемы с этим запросом. Я хочу ВЫБРАТЬ ряд студентов, и они должны проверить некоторые условия.

Мой первый вопрос был:

 SELECT a.id_card, a.cf_id, a.name, e.cf_created, a.email, e.cf_id AS id_exam
            FROM examns_table AS e, students_table AS a 
            WHERE 
                e.paid != 'NULL'  
                AND e.cf_created < $startDate 
                AND e.id_student = a.cf_id 
            ORDER BY e.cf_created DESC
            LIMIT 100 , 10
 

Этот запрос был идеальным. С другой стороны, я хочу проверить студентов, которые получили электронное письмо с записью. Идеальный запрос для этого-это:

 SELECT * FROM email_sending_table as b, students_table as a where a.cf_id=b.id_student and b.sent_date is not null and b.sent_date < '2020-09-15 12:46:46'
 

На этом этапе мне нужно связать оба запроса, получив второй запрос в качестве условного запроса. Я имею в виду, что если существует какой-то студент с cf_id в таблице отправки электронной почты, отправьте второй запрос, проверив, не является ли дата нулевой и меньше ли эта дата «2020-09-15 12:46:46».

У меня есть вот это:

 SELECT b.sent_date, a.id_card, a.cf_id, a.name, e.cf_created, a.email, e.cf_id AS id_exam FROM exam_table AS e, students_table AS a, email_sending_table as b WHERE e.cf_created < '2020-09-15 12:46:46' and e.paid != 'NULL' AND e.id_student = a.cf_id and b.sent_date is not null and b.sent_date < '2020-09-15 12:46:46'
 

Но с этим запросом я получаю все совпадения с этими условиями. Я действительно хочу сделать что-то подобное:

 SELECT b.sent_date, a.id_card, a.cf_id, a.name, e.cf_created, a.email, e.cf_id AS id_exam FROM exam_table AS e, students_table AS a, email_sending_table as b WHERE e.cf_created < '2020-09-15 12:46:46' and e.paid != 'NULL' AND e.id_student = a.cf_id and (IF EXISTS b.id_card = a.id_card (b.sent_date is not null and b.sent_date < '2020-09-15 12:46:46'))
 

Я пытался сделать это ПРОФСОЮЗНЫМ способом, как это:

 SELECT a.id_card, a.cf_id, a.name, e.cf_created, a.email, e.cf_id AS id_exam
            FROM examns_table AS e, students_table AS a 
            WHERE 
                e.paid != 'NULL'  
                AND e.cf_created < $startDate 
                AND e.id_student = a.cf_id 
            ORDER BY e.cf_created DESC UNION SELECT * FROM email_sending_table as b, students_table as a where a.cf_id=b.id_student and b.sent_date is not null and b.sent_date < '2020-09-15 12:46:46'
 

И я тоже попробовал с ЛЕВЫМ СОЕДИНЕНИЕМ, как:

 SELECT a.id_card, a.cf_id, a.name, e.cf_created, a.email, e.cf_id AS id_examenFROM examns_table AS e, students_table AS a INNER JOIN email_sendint_table as b ON (a.cf_id=b.id_student) WHERE e.paid != 'NULL' AND e.cf_created < '2017-09-15 12:46:46' AND e.id_student = a.cf_id AND (b.sent_date IS NOT NULL AND b.sent_date < '2020-09-15 12:46:46' ) ORDER BY e.cf_created DESC LIMIT 100 , 10 
 

Я начинаю с MySQL, поэтому любые советы приветствуются. Спасибо!