我有一個電影表和一個電影可以有一個previous_part。現在我想,例如,基於movie_id'412331'獲取所有電影,如圖像中顯示的星球大戰電影。這可能與SQL(MsSQL/AzureSql)?如何從指向同一個表中的實體的外鍵獲取所有實體?
我對缺乏信息感到抱歉,但我真的不知道如何甚至開始做這個問題的SQL查詢。
更新:
創建一個遞歸查詢,但如果我給啓動它所有的(見代碼塊WHERE Prev.previous_part = 412332
)電影它僅適用。所以在這個例子中,Episode V會返回另外兩部電影,而Episode VI只會返回Episode VII。
With MovieList AS
(SELECT Prev.movie_id, Prev.title, Prev.description, Prev.previous_part, 1 as PrevLevel
FROM Movie as Prev
WHERE Prev.previous_part = 412332
UNION ALL
SELECT Mov.movie_id, Mov.title, Mov.description, Mov.previous_part, ML.PrevLevel + 1
FROM Movie as Mov
INNER JOIN MovieList AS ML
ON Mov.previous_part = ML.movie_id
WHERE Mov.previous_part IS NOT NULL)
SELECT * FROM MovieList
[使用公用表表達式遞歸查詢(https://technet.microsoft.com /en-us/library/ms186243(v=sql.105).aspx])。 – Igor
我喜歡這裏的前傳如何不存在:) 鑑於你有一個publication_year,但是,也許你想要一個名爲類似'franchise','family'或'series'的字段來代替,然後只顯示記錄在發佈順序中具有相同的系列值(如果有)。 –
@JoelCoehoorn問題是,我正在使用像這樣構建的現有數據庫。電影表甚至有大約380000條記錄。 –