mysql left join-只返回右表中的一行-按时间范围选择

q3aa0525  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(277)

我现在正在做一个小项目。我有两张table和活动区
工作台区域

+---------------+
| 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表达式限制为每个外键只能得到一行呢?
提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题