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