Запрос на соединение, основанный на значениях MIN в таблице соединений - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть такая структура таблицы (упрощенно):

Artist

  • ArtistID
  • Имя

ArtistEvent

  • ArtistID
  • EventID

Событие

  • EventID
  • Имя

EventDates

  • EventID
  • Дата

EventGroup

  • EventID
  • GroupID

Group

  • Идентификатор группы

Я хочу вытащить всех исполнителей, у которых есть предстоящие события, на основе идентификатора группы (поэтому group-> EventGroup-> Event-> ArtistEvent-> Artist. Просто, это сделано иработает.

Я также хотел бы показать следующее событие, на котором играет артист (то есть событие с MIN (дата), которое является частью этого объединения.

Поскольку мыуже включив события в объединение, кажется, я должен быть в состоянии получить подробную информацию о том, что событие(просто, может включать это в выборку), но мы должны убедиться, что это ПЕРВАЯ дата (по MIN (Date)), поскольку их может быть несколько (которые не учитываются, когда мы группируемся по 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 голосов
/ 07 февраля 2011

как насчет этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...