• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

odpowiednie zapytanie w MySQL

Object Storage Arubacloud
0 głosów
219 wizyt
pytanie zadane 23 listopada 2016 w SQL, bazy danych przez koczo21 Początkujący (450 p.)

Witam,

 

Potrzebuję pomocy ze sformułowaniem odpowiedniego zapytania w MySQL. Przesyłam tabele oraz zachodzące między nimi relacje, do których chce sformułować to zapytanie https://zapodaj.net/e43d76a649aca.png.html. Chciałbym jednym zapytaniem uzyskać informacje o filmach oraz o reżyserach i osobach odpowiedzialnych za scenarius do danego filmu. Doszedłem do tego, że mogę wyciągnąć tytuł filmu oraz  wykonawców odpowiedzialnych za reżyserie i scenariusz, ale po ich numerze id, a nie po ich nazwie: 

SELECT filmy.Tytul, scenariuszfilmy.scenariusz, rezyserzyfilmy.idrezyserzy
FROM filmy
LEFT JOIN scenariuszfilmy on filmy.idfilm=scenariuszfilmy.filmy
LEFT JOIN rezyserzyfilmy on filmy.idfilm=rezyserzyfilmy.idfilmy
ORDER BY filmy ASC 

Nie wiem, jak sformułować pytanie, aby reżyserów i scenarzystów wyświetlić po nazwie. Czy przy poleceniu SELECT mogę powołać się na kolumnę wykonawcy.autorwykonawca więcej niż raz, tak aby powołać się na różne relacje? Z góry dziękuję za pomoc :)

1 odpowiedź

0 głosów
odpowiedź 25 listopada 2016 przez Czarcik Użytkownik (780 p.)

No tak, możesz LEFT JOINem dodać sobie więcej kolumn z tabeli "wykonawcy". Ale ja na Twoim miejscu zacząłbym od ponownego zaprojektowania tej tabeli. W nazwie pojedyncza forma czyli np. "film" nie "filmy". Zresztą na szybko zrobiony obrazek o co mi chodzi. Dobrze zaprojektowana baza pozwoli Ci łatwo określić zależności One-To-Many, Many-To-One, już nie mówiąc o Many-To-Many

 

komentarz 29 listopada 2016 przez koczo21 Początkujący (450 p.)

Dzięki za wskazówkę odnośnie nazw tabel, pozmieniam to w wolnym czasie :) Jeśli chodzi o LEFT JOIN, to właśnie nie mogę dwa razy dodać jednej kolumny. Na logikę byłoby to takie zapytanie:

SELECT filmy.Tytul, scenariuszfilmy.scenariusz, rezyserzyfilmy.idrezyserzy, wykonawcy.autorwykonawca
FROM filmy
LEFT JOIN scenariuszfilmy on filmy.idfilm=scenariuszfilmy.filmy
LEFT JOIN rezyserzyfilmy on filmy.idfilm=rezyserzyfilmy.idfilmy
LEFT JOIN wykonawcy on wykonawcy.idwykonawcy=rezyserzyfilmy.idrezyserzy
LEFT JOIN wykonawcy on wykonawcy.idrezyserzy=scenariuszfilmy.scenariusz
ORDER BY filmy ASC

ale oczywiście wywali błąd, bo dwa razy dodaje LEFT JOINem tabalę wykonawcy, a jest przecież jedna kolumna wykonawcy.autorwykonawca i baza danych nie wie z którego powiązania korzystać. Mogę zrobić tak:

SELECT filmy.Tytul, scenariuszfilmy.scenariusz, rezyserzyfilmy.idrezyserzy, wykonawcy.autorwykonawca
FROM filmy
LEFT JOIN scenariuszfilmy on filmy.idfilm=scenariuszfilmy.filmy
LEFT JOIN rezyserzyfilmy on filmy.idfilm=rezyserzyfilmy.idfilmy
LEFT JOIN wykonawcy on wykonawcy.idwykonawcy=rezyserzyfilmy.idrezyserzy
ORDER BY filmy ASC

ale wtedy mam tylko reżyserów. Mógłbym przeprojektować bazę danych dodając oddzielną tabelę na wykonawców, z której pobierał bym oddzielnie scenarzystów, ale czy konieczne jest tworzenie nowej tabeli, która jest kopią poprzedniej? Myślałem, że SQL ma jakieś rozwiązanie na ten przypadek, abym mógł ograniczyć się tylko do czterech tabel. Nie da się na przykład tak sformułować pytania, aby wynik wyświetlał kolumny rezyserzyfilmy.idrezyserzy i wykonawcy.autorwykonawca, ale zawartość rekordów pobierał z powiązanej tabeli wykonawcy(np Quentin Tarantino zamiast 11)? 

komentarz 29 listopada 2016 przez jeremus Maniak (59,720 p.)
możesz łączyć tabelę wile razy , ale musisz skorzystać z aliasu, np. wykonawcy w1, wykonawcy w2 , a selectcie wskazac np. w1.autorwykonawca
komentarz 29 listopada 2016 przez koczo21 Początkujący (450 p.)
O to mi chodziło, wielkie dzięki :)

Podobne pytania

0 głosów
5 odpowiedzi 938 wizyt
0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 24 października 2016 w SQL, bazy danych przez Badiusz Obywatel (1,070 p.)
0 głosów
1 odpowiedź 5,202 wizyt

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...