Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podzapytania - podstawy.
Forum PHP.pl > Forum > Bazy danych > MySQL
Whiteye
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.
zzeus
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));
Whiteye
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.
zzeus
  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
Whiteye
Teraz faktycznie działa jak trzeba, dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.