查询不大于当前日期的多个日期

时间:2010-11-07 22:22:15

标签: sql mysql

我的数据库中有一对多的关系,其中一个事件可能有多个日期。我需要找到所有那些没有任何事件超过当前日期的事件(即已经过期的事件)。

我使用以下内容选择所有具有日期的事件:

SELECT events.id AS id,events.picture,events.name,events.venue,events.city
FROM events,event_dates
WHERE event_dates.start_date >= DATE(NOW())
GROUP BY events.id ORDER BY events.id DESC

我试图扭转此问题并不是很聪明,并且获取所有日期为< DATE(NOW())NOT event_dates.start_date >= DATE(NOW())

的事件

哪个(或两者都不)更接近这个想法。

3 个答案:

答案 0 :(得分:2)

你可以简单地做一个不在

之类的地方
SELECT * FROM events WHERE events.ID NOT IN 
(
 your current query here (but only select the id)
)

答案 1 :(得分:1)

使用:

SELECT e.id,
       e.picture,
       e.name,
       e.venue,
       e.city
  FROM EVENTS e
 WHERE NOT EXISTS(SELECT NULL
                    FROM EVENT_DATES ed
                   WHERE ed.event_id = e.id
                     AND ed.start_date >= CURRENT_DATE())

答案 2 :(得分:0)

我知道这有点晚了但是我不喜欢子选择,并且想知道为什么这不能用LEFT JOIN完成?

SELECT events.id AS id,events.picture,events.name,events.venue,events.city 来自事件 LEFT JOIN event_dates ON events.id = event_dates.event_id AND event_dates.start_date&gt; = NOW() WHERE event_dates.ID为null ORDER BY events.id DESC;

关键是将日期测试放在JOIN标准而不是WHERE子句中。我认为它更有效率,特别是如果你在event_dates start_date列上有一个索引?