MySql LEFT JOIN-仅返回右表中的一行-由时间范围选择

时间:2018-08-30 23:22:05

标签: mysql datetime left-join where

我目前正在做一个小项目。我有2个表 AREA ACTIVITY

表区域

+---------------+
| a_id  a_name  |
+---------------+
| 1     area1   |
| 2     area2   |
| 3     area3   |
| 4     area4   |
+---------------+

表格活动

+-----------------------------------------------------+
| id  areaid  starttime            endtime            |
+-----------------------------------------------------+
| 1   1       2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2   2       2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3   1       2018-09-21 17:00:00 2018-09-21 19:00:00 |
| 4   4       2018-07-21 12:00:00 2018-07-21 13:30:00 |
+-----------------------------------------------------+

现在,我想选择所有区域并加入当前处于活动状态或将在下一次启动的活动:

starttime >= NOW() AND endtime >= NOW()
starttime <= NOW() AND endtime >=NOW()

还应显示没有活动或即将进行的活动的区域。

我希望得到以下结果:

+-------------------------------------------------------+
| a_id     id   startime            endtime             |
+-------------------------------------------------------+
| 1        1    2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2        2    2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3        null null                null                |
| 4        null null                null                |
+-------------------------------------------------------+

我已经尝试了几次查询,但是还没有找到解决方案。

当前,这是我的最佳尝试:

SELECT *
FROM areas ar
LEFT JOIN activity a 
ON ar.a_id = a.areaid
WHERE  a.starttime >= NOW() AND a.endtime >= NOW() OR a.starttime <= NOW() AND a.endtime >= NOW()
ORDER BY a.starttime DESC;

通过此查询,我可以找到正在进行或即将进行的活动的所有结果。但是如何将WHERE表达式限制为每个外键仅获得一行?

提前谢谢!

0 个答案:

没有答案