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

Mirosław Zelent Kurs Mysql zadanie domowe z odcinka #2

Object Storage Arubacloud
+1 głos
2,463 wizyt
pytanie zadane 3 maja 2017 w SQL, bazy danych przez DudSon Użytkownik (680 p.)
edycja 3 maja 2017 przez DudSon

Cześć, ma pytanie odnośnie zadania domowego z bazą danych o samochodach. Chodzi mi dokładnie o pytanie numer 3 które brzmi w następujący sposób: "Wszystkie dane na temat samochodów marki Ford posiadanych przez nas  (innymi słowy: "jakie mamy auta marki Ford w firmie i co o nich wiemy?")."  Wszystko co o nich wiemy to tylko idauta, makra, model, przebieg, rocznik, kolor, ubezpieczenie z tabeli auta czy także kiedy i przez kogo zostały wypożyczone? W pierwszym przypadku nie mam problemu z napisaniem zapytania do bazy:

SELECT * from auta WHERE marka="Ford"

W drugim piszę coś takiego:

SELECT * from auta, klienci, wypozyczenia WHERE marka="Ford" AND klienci.idklienta=wypozyczenia.idklienta AND auta.idauta=wypozyczenia.idauta 

I wynik jest zadowalający dostaję wszystkie dane na temat wypożyczenia forda, ale tylko jednego, bo ten drugi nie został wypożyczony. Jakie rozwiązanie jest poprawne? Da się jakoś te zapytania połączyć? Proszę o wskazówki.

Pojawił mi się kolejny problem więc dorzucę go w tym wątku. Dotyczy on pytania numer 7. Samochód (idauta, marka, model), który został najwcześniej wypożyczony  (decyduje datawyp). Piszę coś takiego: 

SELECT auta.idauta, auta.marka, auta.model, wypozyczenia.datawyp from auta, wypozyczenia ORDER BY datawyp ASC

I otrzymuję 20 wyników. Więc wniosek, że problem jest w nieuwzględnieniu relacji między tabelą auta i wypożyczenia tak więc dopisuje 

AND auta.idauta=wypozyczenia.idauta

Otrzymuję:

SELECT auta.idauta, auta.marka, auta.model, wypozyczenia.datawyp from auta, wypozyczenia ORDER BY datawyp ASC AND auta.idauta=wypozyczenia.idauta

A wyników zero :( Gdzie tu jest błąd?

2 odpowiedzi

0 głosów
odpowiedź 3 maja 2017 przez jeremus Maniak (59,720 p.)
w pierwszym przypadku musisz auta złączyć z wyposażeniami relacją left join - wtedy pokaże auta wszystkie , nawet te niewypożyczone

co do drugiego przypadku to musiałbym zerknac na ten 7 odcinek ( nie wiem dokładnie jakia jest struktura tabel ) ale możliwe że trzeba zastosować coś takiego:    select * from auta where id_auta in ( select id_auta from wypożyczenia), pewnie jeszcze jakiś warunek aby nie powtarzać kilkuktrotnie wypożyczonych aut
komentarz 3 maja 2017 przez DudSon Użytkownik (680 p.)

odcinek 2 zadanie 7, ale z zadania domowego jak coś to tu masz linka do paczki z jego strony: 

http://miroslawzelent.pl/pliki/kurs_mysql2.zip

komentarz 3 maja 2017 przez jeremus Maniak (59,720 p.)

popatrzyłem na te zadania

w drugim przypadku zrobiłbym to tak :

SELECT * FROM auta where idauta=(select idauta from wypozyczenia order by datawyp limit 1)

-- natomiast co do pierwszego to tak jak zrobiłeś jest ok - tylko dane auta , można oczywiście dołożyć do auta jeszcze dane klienta i wypozyczenia  korzystając z left join , ale jeśli auto byłoby wiele razy wypożyczane to miałbyć powielenie informacji o samochodzie

komentarz 3 maja 2017 przez jeremus Maniak (59,720 p.)

aby nie być gołosłownym :

SELECT a.*,w.*,k.* from (auta a left join wypozyczenia w on a.idauta=w.idauta ) left join klienci k on w.idklienta=k.idklienta order by a.idauta

 

0 głosów
odpowiedź 6 września 2020 przez marzeniaikoszmary Nowicjusz (140 p.)

Hej, właśnie siedzę nad tymi zadaniami. Jeśli chodzi o zadanie 7 to u mnie działa (nawet gdy dla zabawy/ sprawdzenia wyciągam 3 pierwsze wyniki sortowania - dla kontroli własnej dodałam do SELECT wypozyczenia.datawyp).

SELECT auta.idauta, auta.marka, auta.model FROM auta, wypozyczenia WHERE auta.idauta = wypozyczenia.idauta ORDER BY wypozyczenia.datawyp ASC LIMIT 1

Sprawdzenie 3 pierwszych wypożyczeń:

SELECT auta.idauta, auta.marka, auta.model, wypozyczenia.datawyp FROM auta, wypozyczenia WHERE auta.idauta = wypozyczenia.idauta ORDER BY wypozyczenia.datawyp ASC LIMIT 3

 

 

Podobne pytania

0 głosów
1 odpowiedź 248 wizyt
0 głosów
2 odpowiedzi 574 wizyt
+3 głosów
2 odpowiedzi 497 wizyt

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 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!

...