2010-11-07 80 views
1

我在我的數據庫中有一對多關係,其中一個事件可能有多個日期。我需要找到所有沒有比當前日期更大的事件的事件(即已經過期的事件)。查詢多個日期不大於當前日期

我使用下面的選擇與將來的日期所有這些事件:

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())

事件

哪個(或者哪個都不)更接近這個想法。

回答

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()) 
+0

你對這些疑問的瞭解展示了我一如既往的無知 – kalpaitch 2010-11-07 22:37:32

2

你可以簡單地做一個地方不一樣

SELECT * FROM events WHERE events.ID NOT IN 
(
your current query here (but only select the id) 
) 
0

我知道這是有點晚了,但我不喜歡子查詢,我想知道爲什麼這可能不只是做與一個左連接?

SELECT events.id爲ID,events.picture,events.name,events.venue,events.city FROM事件 LEFT JOIN event_dates ON events.id = event_dates.event_id AND event_dates.start_date> = NOW() WHERE event_dates.ID爲空 ORDER BY events.id DESC;

關鍵是將日期測試放入JOIN條件而不是WHERE子句中。我相信它會更有效率,特別是如果您在event_dates start_date列上有索引?

相關問題