Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: #1242 - Subquery returns more than 1 row
Forum PHP.pl > Forum > Bazy danych > MySQL
muminekSQL
Witam
Po wykonaniu poniższego zapytania wyskakuje mi błąd: "#1242 - Subquery returns more than 1 row ".
W zapytaniu chodzi o to, żeby wyświetlić nazwę wraz z polem ilość, w którym wyliczana jest różnica między ilością rzeczy( pierwsze podzapytanie), a zużytymi rzeczami(drugie podzapytanie) czyli

Nazwa |Ilość
x_____| 5
y_____| 10

  1. SELECT name,
  2. (SELECT COALESCE( sum( amount ) , 0 )
  3. FROM items i, bought b
  4. WHERE b.items_id = i.id
  5. GROUP BY items_id)
  6. -
  7. ( SELECT COALESCE( sum( u.amount ) , 0 )
  8. FROM bought b, used u
  9. WHERE b.id = u.bought_id
  10. GROUP BY items_id )
  11. as amount
  12. FROM items


Jak napisać to zapytanie, żeby było poprawne ?
wookieb
  1. SELECT name,
  2. (SELECT COALESCE( sum( amount ) , 0 )
  3. FROM items i, bought b
  4. WHERE b.items_id = i.id
  5. GROUP BY items_id LIMIT 1)
  6. -
  7. ( SELECT COALESCE( sum( u.amount ) , 0 )
  8. FROM bought b, used u
  9. WHERE b.id = u.bought_id
  10. GROUP BY items_id LIMIT 1)
  11. AS amount
  12. FROM items
  13.  
muminekSQL
To nie jest to. Wartości w kolumnie ilość nie zgadzają się i dostaje coś takiego:
Nazwa |Ilość
x_____| 5
y_____| 5
z_____| 5
.._____| 5

wookieb
  1. SELECT i.name
  2. (COALESCE(sum(a.amount), 0) - coalesce(sum(b.amount), 0) ) AS amount,
  3. FROM
  4. items i
  5. LEFT JOIN bought b ON b.items_id = i.id
  6. LEFT JOIN used u ON u.bought_id = b.id
  7. GROUP BY i.id
  8.  
muminekSQL
To też nie to. Wyniki różnią się od tych, które są poprawne. Zresztą nie dziwi mnie to bo w zapytaniu, które podałeś łączysz wszystkie tabele. Podam schemat bazy i mam nadzieje, że to wyjaśni sytuację.

Tabela: items
Pola: id, name

Tabela: bought
Pola: id,items_id,amount,date

Tabela: used
Pola: id,bought_id, amount, date

Relacje:
items -> bought (1 do wielu)
bought -> used (1 do wielu)

Inaczej napiszę o co mi chodzi. Jedno podzapytanie zwraca n rekordów z kolumną wartość, drugie podzapytanie również zwraca n rekordów z kolumną wartość i interesuje mnie, żeby uzyskać n rekordów z różnicą z kolumn wartość.

zapytanie 1 wynik:
kolumna wartość
a
b
c
zapytanie 2 wynik:
kolumna wartość
d
g
h

oczekuje:
kolumna wartość
a-d
b-g
c-h
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.