MySQL 嵌套 Select BETWEEN 多行
MySQL nested Select BETWEEN multiple rows
我有 2 个 table:
Table 1 调用了 calendar 并且有所有的日期和日子
示例:
---------------------
date | day
---------------------
2013-07-08 | Tuesday
2013-07-09 | Wednesday
等等..
Table 2 称为“事件”并具有事件开始日期和结束日期
示例:
-------------------------------------------
title | date | end_date
-------------------------------------------
eventweek | 2013-07-08 | 2013-07-14
等等
现在我需要 select 这些日期之间的天数是:
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
当然我会得到“子查询 returns 多于 1 行”。
此示例中的预期结果是 2013-07-08 和 2013-07-14 之间的日子加上 2014-07-01 和 2014-07-13 的日子以及每个未来的“eventweek”标记条目。
顺便说一句,这将是一个 table 视图,因此可能无法通过循环解决。有什么想法吗?
非常感谢任何建议,我会尝试所有的建议,看看更简单、更快的。
我觉得between不是一个好的开始,这个应该更好:
SELECT c.day
FROM events e
join calendar c on (c.date>=e.date and c.date<=e.end_date)
WHERE e.title = 'eventweek'
我有 2 个 table:
Table 1 调用了 calendar 并且有所有的日期和日子
示例:
---------------------
date | day
---------------------
2013-07-08 | Tuesday
2013-07-09 | Wednesday
等等..
Table 2 称为“事件”并具有事件开始日期和结束日期
示例:
-------------------------------------------
title | date | end_date
-------------------------------------------
eventweek | 2013-07-08 | 2013-07-14
等等
现在我需要 select 这些日期之间的天数是:
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
当然我会得到“子查询 returns 多于 1 行”。
此示例中的预期结果是 2013-07-08 和 2013-07-14 之间的日子加上 2014-07-01 和 2014-07-13 的日子以及每个未来的“eventweek”标记条目。
顺便说一句,这将是一个 table 视图,因此可能无法通过循环解决。有什么想法吗?
非常感谢任何建议,我会尝试所有的建议,看看更简单、更快的。
我觉得between不是一个好的开始,这个应该更好:
SELECT c.day
FROM events e
join calendar c on (c.date>=e.date and c.date<=e.end_date)
WHERE e.title = 'eventweek'