Zapytanie update, złączenie trzech tabel

Zapytanie update, złączenie trzech tabel
QK
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Tabela model:

Kopiuj
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:

Kopiuj
   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:

Kopiuj
   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:

Kopiuj
 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:

Kopiuj
 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ć :(

QK
  • Rejestracja: dni
  • Ostatnio: dni
0

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

P0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 57
0

Spróbuj

Kopiuj
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));

:)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.