2011-02-07 50 views
0

我有一個這樣的表結構(簡化)基於最小值查詢:加入對連接表

藝術家

  • ArtistID
  • 名稱

ArtistEvent

  • ArtistID
  • 事件ID

事件

  • 事件ID
  • 名稱

EventDates

  • 事件ID
  • 日期

EventGroup

  • 事件ID
  • 羣ID

集團

  • 組ID

我想拔出具有基於組ID(所以組 - > EventGroup->事件 - > ArtistEvent->藝術家即將舉行的活動的所有藝術家。簡單,這是完成和工作。

我也想展示下一個事件,藝術家正在播放的(即與MIN(日期事件)是加入的這一部分。

正如我們已經包括內參加活動似乎我應該能夠得到事件的細節(簡單的說,可以包括在選擇內),但我們需要確保它是第一個日期(由MIN(日期)),因爲可能有多個(這是無視我們對ArtistID進行分組以廢除其餘部分)

到現在爲止,我有一個查詢拉出所有鏈接的藝術家,另一個查詢在我們的代碼中循環運行,併爲每個藝術家抽出下一個事件,但我想知道它的可能性樂在一個查詢中做到這一點?

我能得到它返回的事件,如果我做的:

SELECT artist.name, MIN(EventDate.Date), Event.Name 
FROM Artist 
INNER JOIN ArtistEvent ON Artist.ArtistID = ArtistEvent.ArtistID 
INNER JOIN Event ON Event.EventID = ArtistEvent.EventID 
INNER JOIN EventGroup ON EventGroup.EventID = Event.EventID 
INNER JOIN EventDates ON EventDates.EventID = Event.EventID 
WHERE EventGroup.GroupID = 1234 

但這似乎過於簡單 - 將在活動。返回的名稱肯定對應於EventDates.Date顯示的相同事件?

我想我已經迷茫了自己,需要一雙清新的眼睛?

感謝

+0

什麼往事?如果你有他們的數據庫,MIN不會爲你工作。 – yoda 2011-02-07 14:42:14

+0

即使在MySQL中,您是否還需要GROUP BY子句? – 2011-02-07 15:08:48

回答

0

這個怎麼樣:

SELECT artist.name, MIN(EventDate.Date) 
FROM Artist 
INNER JOIN ArtistEvent ON Artist.ArtistID = ArtistEvent.ArtistID 
INNER JOIN Event ON ArtistEvent.EventID 
INNER JOIN EventGroup ON EventGroup.EventID = Event.EventID 
INNER JOIN EventDates ON EventDates.EventID = Event.EventID 
WHERE EventGroup.GroupID = 1234 
and eventdate.date > sysdate 
group by artist.name