Вам нужен список только тех студентов, у которых нет TID-заполненной записи, чьи даты начала и окончания совпадают с сегодняшней, в Оплате
SELECT * FROM
student
LEFT OUTER JOIN
(select * from payment where TID is not null and NOW() BETWEEN start and end) this_term_payments
on student.id = this_term_payments.sid
WHERE
this_term_payments.ID is null
Есть много способов снять шкуру с этой кошки,Вот один.Мы отфильтровываем таблицу платежей до списка платежей этого термина (это внутренний запрос).И оставил присоединиться к этому студентам.Соединение влево означает, что мы получаем всех студентов, сопоставленных с this_term_payments, если строка this_term_payments существует, или NULL в каждом столбце this_term_payments, если термин платеж не существует.Затем предложение where фильтрует все результаты, установленные как «только те, у кого нет срочного платежа», ища те нули, которые создает левое объединение
FWIW, ваш вопрос привлек близкие голоса, потому что он неt включают примеры данных / демонстрируют уровень ваших усилий, которые мы хотели бы видеть в вопросах SQL.Если вы включили образцы данных для всех ваших таблиц и примерный набор результатов, который вы хотели увидеть, это означает, что мы можем написать точный запрос, который соответствует вашим требованиям.
Это немного обоюдоострый меч для меня;мы можем доставить именно то, о чем вы просите, даже если позже вы поймете, что это не то, что вам нужно (спрашивать по-английски гораздо более расплывчато, чем приводить примерный набор результатов), но в то же время мы в основном становимся неким сторонним подрядчиком по выполнению домашних заданий или подобным образомваша работа для вас и устранение возможностей для обучения на этом пути.Надеюсь, вы возьмете этот запрос (скорее всего, он не выводит все, что вы хотите, или выводит то, что вам не нужно) и создаст из него то, что вы хотите, теперь, когда методика была объяснена ..:)
Для вопроса SQL, который был относительно хорошо получен (к тому времени, когда я закончил редактировать его, следуя комментариям), и привлек несколько отличных ответов, посмотрите здесь:
Заполнитепробелы в данных, используя значение, пропорциональное расстоянию пробела до данных из окружающих строк?
Это больше, как вам нужно задавать вопросы SQL - говорите, что вы хотите, приводите примеры данных, дайте сценариичтобы помочь людям создавать ваши одни и те же данные, чтобы они могли поиграть со своей идеей, не скучая при создании данных.Я выбрал тот, потому что у меня даже не было попыток показать SQL в то время;это было просто мысленное упражнение.Отсутствие работы не обязательно является препятствием для постановки хорошего вопроса