Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Podzapytania - podstawy.
Whiteye
post 2.10.2009, 13:23:22
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.09.2009

Ostrzeżenie: (0%)
-----


Z góry przepraszam jeśli swój problem opiszę niezbyt jasno ale dopiero zaczynam uczyc się SQL'a ;]

Uczę się z książki 'SQL od podstaw', staram się każdy przedstawiony tam przykład testowac i na jednym z takich przykładów się wyłożyłem. Kiedy próbuję w MySQL'u (wersja nowsza niż 4.1) wpisac takie zapytanie:

  1. SELECT IdentyfikatorCzlonka FROM SzczegoloweDaneCzlonkow
  2. WHERE IdentyfikatorCzlonka =
  3. (SELECT MAX(IdentyfikatorFilmu) FROM Filmy
  4. WHERE IdentyfikatorFilmu = (SELECT IdentyfikatorLokalizacji FROM Lokalizacje));


wyskakuje mi następujący komunikat o błędzie:

'Subquery returns more than 1 row'

więc zastanawaim się czy w książce jest błąd (nie zdziwiłbym się bo jak do tej pory było ich sporo) czy MySQL nie obsługuje tego typu zapytań?

Nie wiem czy ma to znaczenie ale IdentyfikatorCzlonka i IdentyfikatorFilmu to liczby całkowite z zakresu 1-15 a IdentyfikatorLokalizacji to liczby calkowite z zakresu 1-3.
Go to the top of the page
+Quote Post
zzeus
post 2.10.2009, 13:53:18
Post #2





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

Ostrzeżenie: (0%)
-----


Wydaje się że w książce jest błąd, obstawiałbym ostatnie podzapytanie, spróbuj tak:

  1. SELECT IdentyfikatorCzlonka FROM SzczegoloweDaneCzlonkow
  2. WHERE IdentyfikatorCzlonka =
  3. (SELECT MAX(IdentyfikatorFilmu) FROM Filmy
  4. WHERE IdentyfikatorFilmu = (SELECT IdentyfikatorLokalizacji FROM Lokalizacje LIMIT 1));


--------------------
Go to the top of the page
+Quote Post
Whiteye
post 2.10.2009, 14:33:00
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.09.2009

Ostrzeżenie: (0%)
-----


Po takiej modyfikacji ostatniego podzapytania wyświetla się wynik ale zły - 'limitując' odpowiedzi trzeciego podzapytania sprawiamy że funkcja 'MAX' wcześniejszego podzapytania traci sens.
Go to the top of the page
+Quote Post
zzeus
post 2.10.2009, 14:38:44
Post #4





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

Ostrzeżenie: (0%)
-----


  1. SELECT IdentyfikatorCzlonka FROM SzczegoloweDaneCzlonkow
  2. WHERE IdentyfikatorCzlonka =
  3. (SELECT MAX(IdentyfikatorFilmu) FROM Filmy
  4. WHERE IdentyfikatorFilmu IN (SELECT IdentyfikatorLokalizacji FROM Lokalizacje));


Teraz powinno być poprawnie


--------------------
Go to the top of the page
+Quote Post
Whiteye
post 2.10.2009, 14:51:24
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.09.2009

Ostrzeżenie: (0%)
-----


Teraz faktycznie działa jak trzeba, dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 03:59