我有一个Symfony项目,其中有2个实体,例如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
答案 0 :(得分:0)
使用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'
答案 1 :(得分:0)
您忘记了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'
)