Scooby2010 10 Geschrieben 18. Juni 2015 Melden Teilen Geschrieben 18. Juni 2015 (bearbeitet) Hallo zusammen, ich bin gerade dabei mich wieder bisschen mit SQL vertraut zu machen. Ich hab mir testhalber mal ne Filmdatenbank gebaut. --Erstellen der Tabellen CREATE TABLE Movie (Movie_ID int identity primary key, Movie_Title nvarchar(50)not null, Movie_OTitle nvarchar(50) null, Movie_Genre int null, Movie_Regie int null); CREATE TABLE Genre (Genre_ID int identity primary key, Genre_Name nvarchar(50)not null); CREATE TABLE Regie (Regie_ID int identity primary key, Regie_Name nvarchar(50)not null); CREATE TABLE Darsteller (Darsteller_ID int identity primary key, Darsteller_Name nvarchar(50)not null); --Befüllen der Tabellen mit Beispieldaten INSERT INTO Movie(Movie_Title, Movie_OTitle, Movie_Genre, Movie_Regie)values ('Gladiator','Gladiator' ,'2','3'); INSERT INTO Movie(Movie_Title, Movie_OTitle, Movie_Genre, Movie_Regie)values ('Stirb langsam','Die Hard' ,'1','1'); INSERT INTO Movie(Movie_Title, Movie_OTitle, Movie_Genre, Movie_Regie)values ('Der Pate','The Godfather' ,'3','2'); INSERT INTO Genre(Genre_Name)values ('Action'); INSERT INTO Genre(Genre_Name)values ('Monumentalfilm'); INSERT INTO Genre(Genre_Name)values ('Drama'); INSERT INTO Regie(Regie_Name)values ('John McTiernan'); INSERT INTO Regie(Regie_Name)values ('Francis Ford Coppola'); INSERT INTO Regie(Regie_Name)values ('Ridley Scott'); INSERT INTO Darsteller(Darsteller_Name)values ('Russell Crowe'); INSERT INTO Darsteller(Darsteller_Name)values ('Bruce Willis'); INSERT INTO Darsteller(Darsteller_Name)values ('Oliver Reed'); INSERT INTO Darsteller(Darsteller_Name)values ('Marlon Brando'); INSERT INTO Darsteller(Darsteller_Name)values ('Al Pacino'); INSERT INTO Darsteller(Darsteller_Name)values ('Alan Rickman'); --Beziehungstabellen anlegen CREATE TABLE Movie_Darsteller (Movie_Darsteller_ID int identity primary key, Movie_ID int null, Darsteller_ID int null); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('1','1'); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('1','3'); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('2','2'); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('2','6'); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('3','4'); INSERT INTO Movie_Darsteller (Movie_ID, Darsteller_ID) values ('3','5'); --Abfrage erstellen SELECT Movie_Title, Movie_OTitle, Genre_Name, Regie_Name, Darsteller_Name FROM Regie INNER JOIN ((Genre INNER JOIN Movie ON Genre.Genre_ID = Movie.Movie_Genre) INNER JOIN (Darsteller INNER JOIN Movie_Darsteller ON Darsteller.Darsteller_ID = Movie_Darsteller.Darsteller_ID) ON Movie.Movie_ID = Movie_Darsteller.Movie_ID) ON Regie.Regie_ID = Movie.Movie_Regie; Wenn die Abfrage erstellt wurde wird es so dargestellt das jeder Film einmal mit jedem Darsteller usw. angezeigt wird. Siehe Anhang. Jetzt meine Frage.Ist das normal ? Kann man das nicht so darstellen das jeder film nur einmal dargestellt wird mit allen Schauspielern ? Ich vermute mal eher nicht oder ? Danke im voarus für die Unterstützung bearbeitet 18. Juni 2015 von Scooby2010 Zitieren Link zu diesem Kommentar
ukulele 11 Geschrieben 18. Juni 2015 Melden Teilen Geschrieben 18. Juni 2015 Das ist zunächst mal normal. Das kann man ändern, ist aber nicht ganz einfach bei einer dynamischen Anzahl an Schauspielern pro Film. In diversen SQL Servern gibt es Funktionen wie GROUP_CONCAT etc. die diese Information aggregieren können. In MSSQL gibt es das so direkt leider nicht aber andere Möglichkeiten. Ein gängiger Trick nutzt XML Path, siehe hier: http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/ Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.