|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piter
pijak
Dołączył: 21 Lis 2006
Posty: 44
Przeczytał: 0 tematów
Skąd: Bocheniec k.Kielc
|
Wysłany: Czw 10:30, 29 Mar 2007 Temat postu: Przykład na ćwiczeniach u Smołki |
|
|
A może by podyskutować o zadaniach, które zamieścił na stronie Smołka i które zaczęliśmy rozważać na ostatnich ćwiczeniach we wtorek?
Może nie tylko ja mam problem z formułowaniem zapytań :wink:
Może częściowo źródłem tych problemów jest to, że używam MySQL'a a tam nie ma słowa INTERSECT :( więc (raczej) poprawne zapytanie do drugiego podpunktu wygląda tak:
Kod: |
SELECT A.country FROM
(SELECT B.country FROM shipclasses AS B WHERE B.type = 'dreadnought') AS A
WHERE A.country IN (SELECT C.country FROM shipclasses AS C
WHERE C.type = 'battlecruiser');
|
...co jak widać nie jest zbyt eleganckie. Może da się krócej.
miło by mi było słyszeć jakieś sugestie co do innych podpunktów.
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Czw 10:51, 29 Mar 2007 Temat postu: |
|
|
Propozycja ceceta z ćwiczeń:
Kod: | SELECT DISTINCT country FROM ShipClasses WHERE country IN
(SELECT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser') |
Trochę krócej, bo występuje 'OR' ;) .
Nie masz INTERSECTA? A inne operacje na zbiorach (UNION, EXCEPT)?
edit: Zapewne EXCEPTA też nie ma ;] . Przynajmniej tak jest napisane w docach dr Telegi.
Ostatnio zmieniony przez Spectro dnia Czw 14:10, 29 Mar 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Rogal
Zjeb z kaszanką
Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów
Skąd: koło podbiegunowe
|
Wysłany: Czw 11:54, 29 Mar 2007 Temat postu: |
|
|
Spectro: To chyba nie całkiem jest to co chcielibyśmy dostać (A chcemy dostać kraje, które mają battlecruisery i dreadnoughty)
Poza tym kompletnie nie rozumiem po co robić tam zapytanie zagnieżdżone. Ten sam efekt dostaniemy prostym pojedynczym zapytaniem.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Czw 13:16, 29 Mar 2007 Temat postu: |
|
|
Po pierwsze - ja tego nie wymyślałem. Po drugie - to rozwiązanie działa.
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Rogal
Zjeb z kaszanką
Dołączył: 13 Mar 2006
Posty: 1745
Przeczytał: 0 tematów
Skąd: koło podbiegunowe
|
Wysłany: Czw 14:46, 29 Mar 2007 Temat postu: |
|
|
Owszem, działa, tj. parsuje się :D
Ale: Cytat: | (SELECT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser') | - to wybiera nam nazwy krajów które mają któryś z dwóch zadanych typów statków. Natomiast zapytanie Cytat: | SELECT DISTINCT country FROM ShipClasses WHERE country IN (...) | po prostu robi nam na tym distinct. Ten sam efekt dostalibyśmy pisząc po prostu
Cytat: | SELECT DISTINCT country FROM ShipClasses WHERE type='dreadnought' OR type='battlecruiser' | z tym że to nie działa tak jakbyśmy chcieli.
Mogę się mylić, ale w takim wypadku niech ktoś wytłumaczy to poprawnie :D
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piter
pijak
Dołączył: 21 Lis 2006
Posty: 44
Przeczytał: 0 tematów
Skąd: Bocheniec k.Kielc
|
Wysłany: Czw 22:48, 29 Mar 2007 Temat postu: |
|
|
Co do rozwiązania Rogala to faktycznie efekt jest ten sam co zacytowanego przez Spektra zapytania (a krutsze jest prawie o połowę).
Ale tak czy inaczej wynik zapytania jest inny od żądanego w zadaniu.
Na zajęciach się pojawiło fajne rozwiązanie z urzyciem INTERSECT, którego nie chce mi się teraz odtwarzać. A chodziło o to, że wybieramy kraje, które posiadają okręty jednego typu, potem to samo dla drugiego typu i robimy na tym intersect. Fajne... ale MySQL z operatorów teoriomnogościowych implementuje tylko UNION :(
chyba się przerzucę na coś innego...
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Czw 23:27, 29 Mar 2007 Temat postu: |
|
|
Cóż, nie znam się za bardzo na SQLu i nie gwarantuję niczego.
@Piter:
Pokombinuj coś z JOINami.
Kod: | SELECT DISTINCT A.country FROM ShipClasses AS A JOIN ShipClasses AS B
ON A.type='dreadnought' AND B.type='battlecruiser' |
Wymyślone naprędce, więc zapewne nie działa :P . Ale idea chyba podobna.
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|