2017-08-31 43 views
0

我有四個表:series,seasons,episodes,images。每個系列由多個季節組成,包含多個劇集。每集有一個或多個附加的圖像。現在我想要檢索一個系列,包括所有季節,情節和圖像。如何鏈SQL查詢

SELECT * FROM series 
LEFT JOIN seasons ON seasons.seasons_series_id=series.series_id 
LEFT JOIN episodes ON episodes.episodes_seasons_id=seasons.seasons_id 
LEFT JOIN images ON images.images_id=episodes.episodes_images_id 
WHERE series.series_id=1 

上面的查詢不起作用,因爲seasons_id運行第二LEFT JOIN等我應該使用嵌套查詢,而不是時,無法使用?

+0

爲什麼你認爲它不可用...?請顯示樣本數據,表格結構和期望的結果。 – Siyual

+0

看看你的表結構,看看哪些列可用 –

+2

除非你有'episodes'但沒有'seasons'(這似乎是一個數據問題)''系列'我不明白爲什麼你的查詢wouldn'根據你迄今爲止所展示的內容來做工作。顯示您的表架構,一些示例數據,您獲得的結果以及您期望得到的結果。 –

回答

-1

由於您的表不使用別名,所以MySQL可能不知道哪列屬於每個表。嘗試爲每個表使用別名並再次運行。

希望這有助於

+0

謝謝,編輯我的例子。 – bart

2

在發佈到討論中的查詢中,seasons_id一般IS用於該第二LEFT JOIN(第三,如果涉及到它)。

在你添加額外JOIN s到查詢時,那些JOIN。就拿不僅考慮從原來FROM子句中的表,而且迄今爲止任何額外JOIN建立起來的整個結果集。這就是爲什麼總是爲你的表使用別名是一個好主意......它可能通過JOIN不止一次在查詢中包含同一個表,並且別名對於保持直接單獨實例同一張桌子。

當您的seasons_id不可用時唯一的情況是當您有一個series記錄沒有任何seasons記錄與其關聯。在這種情況下,seasons_id的結果中將有NULL的值,並且在顯示的架構中,您根本沒有辦法連接任何episode記錄和該記錄。在這個模式中,如果每個series具有任何episodesimages,則必須至少有一個season。因此,缺失的seasons_id無論如何不會有任何問題,因爲您無法希望匹配該series的任何episode記錄。

1

查詢沒有任何問題..如果關係中斷並且左連接顯示例如第二季沒有已知的劇集,那麼這些非劇集就不會有任何圖像。它不會停止該系列有兩個賽季,你只要看到這樣的結果:

Game of thrones, season 1, episode 1, image 1 
Game of thrones, season 2, null, null 

如果你的數據庫強制執行的關係,那麼你就永遠無法從寶座上賽季的2場比賽第1集插入圖片,因爲情節必須首先成爲孩子圖像的父母。如果你的數據庫沒有執行關係,那麼你可以繼續前進並插入一大堆圖像,並給他們一個971的插曲ID,你可以預測當你插入它時,s2 e1會得到什麼,但是他們贏了在你的查詢中不顯示,因爲它們是孤兒,如果在ID中不存在ID爲971的情節但是

如果你希望你的查詢會顯示這些孤兒圖像,你必須以不同的方式寫它