У меня есть проект Symfony с двумя объектами, такими как Session 1 <-> n Timeslots (и многие другие объекты).
Моя проблема в том, что я не могу найти запрос, который извлекал бы список сеансов, где ВСЕ временные интервалы больше заданной даты. Можно ли это сделать одним запросом?
Я пробовал с MIN (упрощенная версия, без дополнительного JOIN с другими объектами):
SELECT s.id
FROM session s
JOIN timeslot t ON t.sessionId = s.id
HAVING MIN(t.timelotDate) > '2019-05-05';
Но я не получаю ни одного элемента с этим запросом.
Я сделал для этого sqlfiddle:
http://www.sqlfiddle.com/#!9/4b485b/5






используйте max() и group by
SELECT s.id
FROM session s
JOIN timeslot t ON t.sessionId = s.id group by s.id
having max(t.timelotDate) > '2019-05-05'
Это приведет к получению большего количества результатов, чем ожидалось: сеанс может иметь много временных интервалов, поэтому с вашим запросом я получу любой сеанс, ПО КРАЙНЕЙ МЕРЕ, с одним временным интервалом > XX. Я хочу получить сеанс с КАЖДЫМ/ВСЕМИ временными интервалами> XX
каков ваш ожидаемый ответ
Вы забыли GROUP BY:
SELECT session.id
FROM session
JOIN timeslot ON timeslot.sessionId = session.id
GROUP BY session.id
HAVING MIN(timeslot.timeslotDate) > '2019-05-05'
Альтернативой может быть:
SELECT *
FROM session
WHERE NOT EXISTS (
SELECT 1
FROM timeslot
WHERE timeslot.sessionId = session.id
AND timeslot.timeslotDate <= '2019-05-05'
)
Вы правы насчет GROUP BY с предложением HAVING: я получаю результаты, но по какой-то причине я получаю все идентификаторы сеансов, а не только те, которые HAVING MIN (t.timelotDate) > '2019-05-05'... Я попытаюсь сделать sqlfiddle или что-то подобное
@Передозировка, если у вас есть предложение where, которое фильтрует все прошлые/будущие даты, тогда идея HAVING не сработает, хотя NOT EXISTS можно подключить к существующему предложению where.
В моем «реальном» запросе у меня больше соединений с некоторыми отношениями «многие ко многим» (одно из которых является обязательным, поскольку на нем также есть фильтр). В этом, я думаю, и состоит суть разницы между вашим ответом, который я принял, и моим более сложным запросом. Но часть, касающаяся заданного вопроса, меня устраивает. Мне просто нужно подумать, как обойти проблему.
Я не вижу группу по (и благодаря тупости MySQL запрос работает).