Ich habe eine Filmtabelle und ein Film kann einen previous_part haben. Nun möchte ich zum Beispiel anhand von movie_id '412331' alle Filme wie auf dem Bild mit den Star Wars-Filmen gezeigt bekommen. Ist dies mit SQL (MsSQL/AzureSql) möglich?Wie erhalten Sie alle Entitäten von einem Fremdschlüssel, der auf eine Entität in derselben Tabelle verweist, wiederholend?
Es tut mir leid für den Mangel an Informationen, aber ich habe ehrlich gesagt keine Ahnung, wie man überhaupt eine SQL-Abfrage mit diesem Problem zu machen.
Update:
Erstellt eine rekursive Abfrage, aber es funktioniert nur, wenn ich den Film geben, der es allen (siehe WHERE Prev.previous_part = 412332
im Codeblock) beginnt. In diesem Beispiel würde also Episode V die beiden anderen Filme wiedergeben und Episode VI würde nur Episode VII zurückgeben.
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
[rekursive Abfragen mit Common Table Expressions] (https://technet.microsoft.com /en-us/library/ms186243(v=sql.105).aspx]). – Igor
Ich liebe, wie die Prequels existieren hier nicht :) Gegeben, Sie haben eine publication_year, obwohl, vielleicht möchten Sie ein Feld namens etwas wie 'Franchise', 'Familie', oder' series' stattdessen, und dann zeigen Sie einfach die Datensätze, die den gleichen Serienwert (falls vorhanden) in der Reihenfolge der Veröffentlichung haben. –
@JoelCoehoorn Das Problem ist, dass ich mit einer bestehenden Datenbank arbeite, die so aufgebaut ist. Der Filmtisch hat sogar rund 380000 Datensätze. –