Powiazanie danych w tabelach film-aktor

0

hej przepraszam mam problem z zapytaniem , czy moglibyscie mi ewentualnie z tym jakos pomoc
otóż:
napisz skrypt ktory wyswietli glownego aktora i rezysera dla kazdego filmu w bazie danych
tabele jak mysle beda dwie w tym momencie potrzebne bedzie to tabela movie i people, wygladaja one tak:
tabela movie

 
movie_id
movie_name
movie_type
movie_year
movie_actor
movie_director

tabela people

 
people_id
people_fullname
people_isactor
people_isdirector

tabela movie z przykladowymi danymi
1 brucewszechomogacy 5 2003 1 2

tabela people z przykladowymi danymi
1 jim carrey 1 0
za szybka pomoc bede wdzieczny

0

Znaczy za gotowca do szkoły?
Wystarczy że złączysz tabelę filmów i ludzi za pomocą inner join. Żeby dostać aktora po movie_actor, a reżysera po movie_director.
Jeśli jedno zapytanie ma zwrócić i aktora i reżysera to masz kilka sposobów:

  1. jedno zapytanie o aktora i union all z zapytaniem o reżysera
  2. movie dwa razy join z people (raz po movie_actor, drugi po movie_director) + odpowiednie sortowanie (żeby np. zawsze aktor był pierwszy)
  3. jedno złączenie z warunkiem or, po aktorze lub po reżyserze + odpowiednie sortowanie (żeby np. zawsze aktor był pierwszy)
0

Jak napisał massther, z tym że: idealnie byłoby przechowywać powiązania film-aktor w osobnej tabeli, w relacji jeden od wielu. Tak, tak wiem - chodzi o głównego aktora tylko, więc to tylko tak 'pro forma'.

0

zrobilem na razie tylko z actorem nie wiem jak z dyrektorem

select movie_name , people_fullname from movie inner join people on movie_actor=people_id order by 1;

czy po warunku dac 'and' ?

1
  1. Tu nie masz warunku, tylko łączenie tabel.
  2. Nie możesz dać AND, bo wtedy szukałbyś filmu, który ma takie samo id dla aktora i dyrektora. Czyli raczej nic byś nie znalazł... albo jakieś bzdury. Zapytanie powinno wyglądać tak:
SELECT f.movie_name tytul, a.people_fullname aktor, d.people_fullname FROM movie f inner join people a ON f.movie_actor=a.people_id  JOIN people d ON d.people_id=f.movie_director ORDER BY 1
  1. Aliasuj. Jeśli tego nie będziesz robił, to nie będziesz mógł dwa razy dołączyć tej samej tabeli.
0

ok dziekuje , bardzo za pomoc :) pozdrawiam :)

0

bez drugiego inner nie poszlo tak wyglada kod ktory mnie zadzialal

 SELECT f.movie_name tytul, a.people_fullname aktor, d.people_fullname FROM movie f INNER JOIN people a ON f.movie_actor=a.people_id  inner JOIN people d ON d.people_id=f.movie_director ORDER BY 1 

jeszcze raz dziekuje

1 użytkowników online, w tym zalogowanych: 0, gości: 1