Объединение двух SQL-запросов с несколькими таблицами

У меня есть база данных. В этой базе данных времена года содержат несколько программ, и в программе записано и записано несколько композиций, а также песня содержит несколько музыкальных клавиш, а музыканты и участники группы используют инструменты.

Ниже приведены нормализованные таблицы моей базы данных

seasons -> season_id(pk), name
programs -> program_id(pk), name
programs_recorded -> p_id(pk), season_id(fk), program_id(fk)
songs -> song_id(pk), title
songs_performed -> s_id, song_id(fk), program_id(fk)
musical_keys -> song_id(fk), music_keys
musician -> musician_id(pk), name, song_id
band -> band_id(pk), song_id(fk), band_name
band_member -> member_id(pk), band_id(fk), member_name
instrument -> instrument_id, instrument_name 
musician_plays -> m_id(pk), musician_id(fk), instrument_id(fk)
member_plays -> mem_id(pk), instrument_id(fk), member_id(fk)

Примечание: Песня исполняется в программе Musician, Band, так что первичный ключ песни находится в музыке и группе как внешние ключи, также Musician и Band используют инструменты для записи песен. У группы есть участники группы.

Мой запрос: для конкретной записи перечислите все инструменты и ключевые заметки (музыкальные клавиши), которые были использованы для создания записи?

Примечание. Моя запись - это моя Program_id, так как каждая программа записывается в сезон.

Теперь вот мои запросы, к которым я хочу присоединиться:

SELECT
 programs.program_id,
 GROUP_CONCAT(DISTINCT instrument_name),
 GROUP_CONCAT(DISTINCT music_keys)
FROM
 seasons
 INNER JOIN programs_recorded ON seasons.season_id=programs_recorded.season_id
 INNER JOIN programs ON programs_recorded.program_ID=programs.program_ID
 INNER JOIN songs_performed ON programs.program_ID=songs_performed.program_ID
 INNER JOIN songs ON songs_performed.song_id=songs.song_id
 INNER JOIN musical_keys ON songs.song_id=musical_keys.song_id
 INNER JOIN band ON band.song_id=songs.song_id
 INNER JOIN band_member ON band_member.band_id=band.band_id
 INNER JOIN member_plays ON member_plays.member_id=band_member.member_id
 INNER JOIN instrument ON member_plays.instrument_id=instrument.instrument_id 
WHERE
 songs_performed.program_id=12000
GROUP BY songs_performed.program_id;

Присоединитесь к этому запросу с помощью

SELECT
 programs.program_id,
 GROUP_CONCAT(DISTINCT instrument_name),
 GROUP_CONCAT(DISTINCT music_keys)
FROM
 seasons
 INNER JOIN programs_recorded ON seasons.season_id=programs_recorded.season_id
 INNER JOIN programs ON programs_recorded.program_ID=programs.program_ID
 INNER JOIN songs_performed ON programs.program_ID=songs_performed.program_ID
 INNER JOIN songs ON songs_performed.song_id=songs.song_id
 INNER JOIN musical_keys ON songs.song_id=musical_keys.song_id
 INNER JOIN musician ON musician.song_id=songs.song_id
 INNER JOIN musician_plays ON musician_plays.musician_id=musician.musician_id
 INNER JOIN instrument ON musician_plays.instrument_id=instrument.instrument_id
WHERE
 songs_performed.program_id=12000
GROUP BY songs_performed.program_id;

Оба запроса дают мне правильный результат, но отдельно, я не знаю, как присоединиться к ним и распечатать результат с помощью одного запроса

Примечание. Песня связана с композициями song_performed, musician и band.

Может ли кто-нибудь присоединиться к этим запросам? Если у кого-то есть путаница в моем дизайне, пожалуйста, не стесняйтесь спрашивать.

1 ответ

Отправленный в ответ от имени ОП:

Проблема решена. Я просто написал " Union All между двумя запросами, и это сработало.

licensed under cc by-sa 3.0 with attribution.