Как я могу запросить 2 таблицы и вернуть результаты, если 2-я таблица соответствует условию

#mysql #sql

#mysql #sql

Вопрос:

Я разработал игру, в которой проводится много турниров. Все запущенные турниры хранятся в таблице running_tournaments. Когда игрок участвует в турнире, его оценка за этот турнир сохраняется в таблице результатов.

Я хотел бы написать скрипт, который периодически проверяет базу данных, чтобы узнать, закончились ли какие-либо турниры (их end_date в прошлом), И все результаты для этого турнира были «проверены». Оценка считается проверенной, если проверенное значение для этой оценки равно «1».

Как я могу запросить эти таблицы, чтобы вернуть все турнирные идентификаторы турниров, где все результаты для этого турнира были проверены (проверено = 1)?

В качестве примера, учитывая приведенные ниже данные, если сегодняшняя дата — 3 января, запрос должен возвращать только идентификатор турнира # 1. Идентификатор турнира 1 имеет два результата, которые были проверены, и его дата — сегодня или раньше. Все остальные турниры либо в будущем, либо имеют 1 или более баллов, которые не проверены.

введите описание изображения здесь

Ответ №1:

Хммм … я думаю join , и group by делает то, что вы хотите:

 select s.tourn_id
from scores s join
     running_tournaments rt
     on s.tourn_id = rt.id
where end_date <= curdate()
group by s.tourn_id
having min(s.verified) = 1;