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

Geschrieben (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 von Scooby2010
Geschrieben

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/

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...