Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podzapytania - podstawy.
Whiteye
post
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
 
Start new topic
Odpowiedzi (1 - 4)
zzeus
post
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
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
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
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 Aktualny czas: 19.08.2025 - 17:18