Jump to content

SQLCompact Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 von Scooby2010
Link zu diesem Kommentar

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/

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...