Jak powinno wyglądać zapytanie zwracające filmy z dwoma aktorami?

0

Wyświetl tytuły i rok produkcji filmów, w których zagrało dokładnie 2 aktorow. Muszę napisać kod.Moze ktos ms pomysł?

3

Jakiś schemat bazy może. Czy mamy zgadywać z fusów?

3

Ok, potrzebujesz:

  • zwrócić kolumny z interesującymi Cię informacjami (zgaduję, że dwie) - coś w stylu SELECT <to co chcę> FROM <tam skąd chcę> ...., nie ma wielkiej filozofii
  • jeśli masz, a prawie na pewno masz, kilka tabel z różnymi informacjami o filmach, aktorach, rolach etc. to trzeba je jakoś złączyć ze sobą i zebrać do kupy - od tego masz ..... <jakaś tabela> JOIN <inna tabela> ..... Ponieważ "brak filmu" albo "brak aktora" średnio ma sens w tym kontekście, to pewnie INNER JOIN będzie najbardziej sensowny
  • nie potrzebujesz informacji o aktorach, a jedynie o tym ilu ich było, więc zapewne wystarczy złączyć np. filmy i role, z ról wyjąć klucze identyfikujące aktora i film i dopilnować, żeby nie było duplikatów (bo akurat jakiś aktor miał dwie role w jednym filmie niczym Cezary Żak w Ranczo) - pewnie gdzieś po drodze wskoczy DISTINCT. Możliwe że pomocne będzie złączenie tabeli z filmami z jakimś podzapytaniem na rolach, a nie gołą tabelą - coś w stylu: .... INNER JOIN (SELECT DISTINCT ... FROM <tabela z rolami>) AS <jakaś tymczasowa nazwa> ...
  • takie bezwarunkowe złączenie tak o skończy się tak, że dopasujesz każdy film z każdym aktorem, a to raczej nie ma sensu, potrzebny jest jakieś kryterium, a skoro mamy filmy i role to pewnie identyfikator filmu w obu tabelach powinien być taki sam: ... ON <klucz z tabeli z filmami> = <klucz filmu z tabeli z rolami> ...
  • jak już masz potrzebne kolumny, wiesz który aktor grał w którym filmie, nie masz duplikatów i masz poprawne złączenie, trzeba jeszcze zliczyć wystąpienia aktorów dla każdego filmu. Najłatwiej będzie pogrupować wynik JOINa po identyfikatorze filmu - od tego jest ... GROUP BY <to po czym grupujesz> ...
  • chcesz też zliczyć aktorów dla każdego filmu - wynik masz już pogrupowany wg. filmów, więc "pod spodem" zagregowanych jest wiele rekordów dla danego filmu, odpowiadających poszczególnym aktorom. Wystarczy je zliczyć używając COUNT(...)
  • masz zwrócić informacje o filmach z konkretną liczbą aktorów, więc potrzebny jest warunek. W przypadku grupowania możesz użyć .... HAVING <warunek>. Warunkiem jest liczba aktorów równa 2, więc będzie to coś w stylu .... HAVING COUNT(...) = 2

No i z tych kawałków poskładasz już gotowe zapytanie :)

2
Аліса Єреемєєва napisał(a):

Muszę napisać kod.

Nie krępuj się, Albercik, pisz, pisz...

Moze ktos ms pomysł?

pewnie, że ktoś ma jakiś pomysł

0

Ja mam pomysł

select tytul, rokProdukcji
from
(select f.tytul, f.rokProdukcji, count(af.idAktora)
from
    filmy f
    join aktorzyFilmy af on af.idFilmu
group by f.tytul, f.rokProdukcji
having count(af.idAktora) = 2) as Widok

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