[英]Join two SQL queries with multiple tables
我有一個數據庫在這個數據庫中,一個季節記錄了多個程序,並且在該程序中執行/錄制了多首歌曲,而且一首歌還具有多個音樂鍵,並且Musical and Band成員使用樂器。
以下是我數據庫的規范化表
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在程序中執行的,因此歌曲的主鍵在音樂家和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;
這兩個查詢都給我正確的結果,但是分別地,我不知道如何將它們連接起來並通過一個查詢打印結果
注意:歌曲與songs_performed,音樂家和樂隊表相關。
任何人都可以加入這些查詢嗎? 如果有人對我的設計有任何疑問,請隨時提出。
代表OP發布作為答案:
問題解決了。 我只是在兩個查詢之間編寫了Union All
,它確實有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.