2011-02-07 53 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