首页 > 解决方案 > MySQL 嵌套 Select BETWEEN 多行

问题描述

我有 2 个表:
表 1称为日历并包含所有日期和日期
示例:

---------------------
date       | day
---------------------
2013-07-08 | Tuesday
2013-07-09 | Wednesday

所以..

表 2称为“事件”并具有事件开始日期和结束日期
示例:

-------------------------------------------
title     | date        | end_date
-------------------------------------------
eventweek | 2013-07-08  | 2013-07-14

等等

现在我需要选择这些日期之间的日子:

SELECT days
FROM   calendar
WHERE  date BETWEEN
                     (
                     SELECT date
                     FROM   events
                     WHERE  title LIKE %eventweek%)
AND
       (
              SELECT end_date
              FROM   events
              WHERE  title LIKE %eventweek%).

现在的问题是当有多个“eventweek”标题为这样的事件时:

-------------------------------------------
title     | date        | end_date
-------------------------------------------
eventweek | 2013-07-08  | 2013-07-14
eventweek | 2014-07-01  | 2014-07-13

当然我会得到“子查询返回超过 1 行”。

此示例中的预期结果是 2013-07-08 和 2013-07-14 之间的日子加上 2014-07-01 和 2014-07-13 的日子以及每个未来的“eventweek”标记条目。

顺便说一句,这将是一个表格视图,所以可能无法通过循环来解决。有任何想法吗?

非常感谢您的任何建议,我将尝试所有这些以查看更简单和更快的建议。

标签: mysqlnestedbetween

解决方案


我不认为之间是一个好的开始,这应该更好:

SELECT c.day
FROM events e
join calendar c on (c.date>=e.date and c.date<=e.end_date)
WHERE e.title = 'eventweek'

推荐阅读