根据连接表上的MIN值加入查询

时间:2011-02-07 14:38:53

标签: mysql join

我有一个像这样的表结构(简化):

艺术家

  • ArtistID
  • 名称

ArtistEvent

  • ArtistID
  • 事件ID

事件

  • 事件ID
  • 名称

EventDates

  • 事件ID
  • 日期

EventGroup

  • 事件ID
  • 的GroupID

  • 组ID

我想根据群组ID抽出所有即将举办的活动的艺术家(所以group-> EventGroup-> Event-> 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

但这似乎太简单了 - 返回的Event.Name肯定会对应于EventDates.Date显示的同一事件吗?

我觉得自己很困惑,需要一双新眼睛?

由于

1 个答案:

答案 0 :(得分: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