#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, поэтому любые советы приветствуются. Спасибо!