Zapytanie update, złączenie trzech tabel

0

Mam problem z zapytaniem sqla. Chcę zaktualizować jedno pole jednego rekordu w tabeli.
Struktura tabel wygląda tak:

Tabela model:

id_modele serial NOT NULL,
  nazwa character varying(30),
  ilosc integer,
  pozostala_ilosc integer,
  cena numeric,
  CONSTRAINT modele_pkey PRIMARY KEY (id_modele ) 

Tabela rowery:

   id_rowery serial NOT NULL,
  typ_id_typ integer NOT NULL,
  modele_id_modele integer NOT NULL,
  rok_produkcji integer,
  kolor character varying,

Tabela rezerwacje:

   id_rezerwacje serial NOT NULL,
  rowery_id_rowery integer NOT NULL,
  klient_id_klienta integer NOT NULL,
  data_rezerwacji timestamp without time zone,
  ile_dni integer, 

Chcę zrobić UPDATE pola pozostala_ilosc z tabeli model dla rekordu, który ma największy id_rezerwacji.
Napisałam select, który wyciąga mi pozostala_ilosc z odpowiedniego rekordu w taki sposób:

 SELECT m.pozostala_ilosc  FROM rowery r JOIN modele m 
	ON m.id_modele = r.Modele_id_modele WHERE r.id_rowery = (
							SELECT rowery_id_rowery 
							FROM rezerwacje 
							WHERE id_rezerwacje 
							IN (SELECT MAX(id_rezerwacje) 
							FROM rezerwacje) );

i teraz próbowałam zrobić update w taki sposób:

 UPDATE modele SET pozostala_ilosc = (SELECT m.pozostala_ilosc  FROM rowery r JOIN modele m 
	ON m.id_modele = r.Modele_id_modele WHERE r.id_rowery = ( SELECT rowery_id_rowery FROM rezerwacje 
		WHERE id_rezerwacje IN (SELECT MAX(id_rezerwacje) FROM rezerwacje) ) ) -1 

ale zmieniły mi się wartości pozostala_ilosc w całej tabeli, a nie tylko w jednym rekordzie jak tego oczekiwałam. Czy mógłby mi ktoś podpowiedzieć co poprawić? Podejrzewam, że brakuje jakiegoś WHERE'a, ale nie wiem jak go sformułować :(

0

W załączniku znajduje się printscreen z graficznego przedstawienia tabel, może tak będzie łatwiej

0

Spróbuj

UPDATE Modele
   SET pozostala_ilosc = (pozostala_ilosc - 1)
 WHERE id_modele =
       (SELECT id_modele
          FROM modele m
          JOIN rowery r
            ON r.Modele_id_modele = m.id_modele
          JOIN Rezerwacje re
            ON r.id_rowery = re.rowery_id_rowery
         WHERE re.id_rezerwacje = (SELECT MAX(ID_REZERWACJE)
                                     FROM Rezerwacje));

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1