簡體   English   中英

將兩個SQL查詢與多個表聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM