gpt4 book ai didi

mysql - SQL 查询中的 Join + 日期条件

转载 作者:行者123 更新时间:2023-11-28 23:51:08 24 4
gpt4 key购买 nike

我在数据库中有两个表:EventsDates,它们之间是一对多的关系(1 个事件可以发生在多个表中)日期)。

我想查询数据库以获取 future 和过去的事件,如下所示:

  • 获取 future 事件的查询应返回日期 >= CURDATE() 和尚未分配日期的事件...
  • 获取过去事件的查询应该只返回至少指定了一个日期的事件,而这些日期应该早于 CURDATE()...

我正在使用简单的连接查询数据库,获取过去事件的适当结果(限制不返回没有日期的事件)。但是,查询 future 事件有点棘手,因为还必须返回没有日期的事件。我愿意接受任何建议。

到目前为止我的尝试:

对于过去的事件(工作正常):

SELECT dates.*, events.*,
FROM events
JOIN dates on (events.eventID = dates.eventID AND dates.date < CURDATE())
GROUP BY events.eventID
ORDER BY events.eventID ASC

对于 future 的事件: ???

SELECT dates.*, events.*,
FROM events
LEFT JOIN dates on (events.eventID = dates.eventID AND dates.date >= CURDATE())
GROUP BY events.eventID
ORDER BY events.eventID ASC

(我知道我对 LEFT JOIN 的尝试无效,因为它还返回过去的事件,没有日期信息(每个字段都为 NULLED))。

提前致谢。

最佳答案

首先,按照您的布局,您的查询不需要 GROUP BY 子句,因为没有进行聚合(没有 count最大等)。

你必须将“连接逻辑”和“条件逻辑”分开,所以我建议:

过去的事件:

SELECT dates.*, events.*
FROM events
JOIN dates on (events.eventID = dates.eventID)
WHERE dates.date < CURDATE()
ORDER BY events.eventID ASC

future 事件:

SELECT dates.*, events.*
FROM events
LEFT JOIN dates on events.eventID = dates.eventID
WHERE dates.date >= CURDATE()) OR dates.date IS NULL
ORDER BY events.eventID ASC

关于mysql - SQL 查询中的 Join + 日期条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com