Relationsproblem
Jag gör en databas med en tabell med filmer och en annan tabell med skådespelare. Jag vill med hjälp av relationer kunna lista alla skådespelare i en vald film. Jag vill även kunna göra tvärtom - lista alla filmer en skådespelare varit med i. Problemet är att jag inte vet hur man skapar sådana relationer. Hur gör man?
Svara
Sv: Relationsproblem
Eftersom det blir en relation som är många till många, dvs i en film kan det finnas många skådespelare och en skådespelare kan finnas i många filmer så ska du lägga en tabell mellan dina två tabeller som enbart fungerar som en relationstabell. Denna tabell ska ha ett fält med FilmID och ett fält med SkådespelarID.
Är du med?
/Janne
Svara
Sv: Relationsproblem
Hej!
Jag har likartat problem och tänkte hänga på med en följdfråga.
Om man nu vill lista alla filmer med alla skådespelarna så att listan ser ut så här:
Titanic Eva Rydberg
Titanic Nils Poppe
Titanic Anna-Lisa Eriksson
Hets Fred Astair
Hets Marilyn Monroe
osv..
Hur kan ett sådant sql-utryck se ut?
Om man dessutom vet att vissa filmer är tecknade och alltså inte har några skådespelare, men filmerna ska visas i listan i alla fall, hur påverkar det sql-uttrycket.
Kjell
Svara
Sv: Relationsproblem
SELECT m.Title, a.Name
FROM MoviesActors ma
RIGHT JOIN Movies m
ON ma.MovieId = m.MovieId
LEFT JOIN Actors a
ON ma.ActorId = a.ActorId
Svara
Sv: Relationsproblem
Jag skulle föreslå något sånt här:
SELECT Movies.MovieTitle, Actors.ActorName
FROM (Movies LEFT JOIN MoveActors ON Movies.MovieID = MoveActors.MovieID) LEFT JOIN Actors ON MoveActors.ActorID = Actors.ActorID;
Svara
Sv: Relationsproblem
Jag provade din variant Christoffer, men jag fick inte det att fungera. Har inte hunnit prova din variant än Andreas, men den verkar lovande.
Jag satt själv och knåpade ihop följande mastiga uttryck:
SELECT Movies.MovieTitle,
(SELECT Actors.ActorName FROM Actors
WHERE Actors.ActorID=MoveActors.ActorID) AS Moviestar
FROM Movies LEFT JOIN MoveActors
ON Movies.MovieID=MoveActors.MovieID
Denna variant fungerar, men om Andreas funkar är den nog att föredra. Om fler fält ska till, blir uttrycket mycket mindre.
Kjell
Svara
Sv: Relationsproblem
Man tackar för komplimangen. Men skulle nog inte säga perfekt. Ingen är ju ofelbar... :O)
Svara
Sv: Relationsproblem
Eeehh? Du gör ju precis samma som jag gör? Jag har bara vänt på ordningen av tabellerna och därav en RIGHT istället för en LEFT.
Svara
Sv: Relationsproblem
Vad var det som inte fungerade i min variant? Jag testade den med nedanstående tabellstruktur, och den fungerade utmärkt.
Movies
MovieId Title
1 Titanic
2 Hets
3 Ghost in the Shell
Actors
ActorId Name
1 Janne
2 Nisse
3 Sture
4 Leffe
5 Pelle
MoviesActors
MovieId ActorId
1 1
1 2
1 3
2 4
2 5
Svara
Sv: Relationsproblem
Har för mig att det är så att SQL motorn utför Paranteser först. Använder Därför Movies som grund tabell och gör en LEFT JOIN mot MoveActors.Resultatet av dett matchas sedan mot Actors. Vet ju inte om det här stämmer. Är ju inte jag som gjort SQL tolken eller databas motorn. Har för mig att Access kräver paranteser i vissa fall för att den skall veta i vilken ordning den ska hantera join utrycken.
Svara