postgres update delete - ghdrako/doc_snipets GitHub Wiki

Są dwa sposoby modyfikacji danych w tabeli za pomocą wartości pobranych z innej tabeli. Pierwszy z nich to podzapytanie w klauzuli SET

UPDATE pracownicy
SET imie = (select imie from pracownicy where nazwisko = 'Nowak')
WHERE nazwisko = 'Kowalski';

Drugi sposób to użycie klauzuli FROM

UPDATE pracownicy
SET imie = p.imie
FROM pracownicy p
WHERE pracownicy.nazwisko = 'Kowalski'
AND p.nazwisko = 'Nowak';

Opcjonalna klauzula RETURNING pozwala na zwrócenie poszczególnych kolumn lub całych rekordów które zostały zmodyfikowane

UPDATE pracownicy
SET imie = p.imie
FROM pracownicy p
WHERE pracownicy.nazwisko = 'Kowalski'
AND p.nazwisko = 'Nowak'
RETURNING *;

Jak w przypadku polecenia UPDATE są dwa/trzy sposoby na usuwanie danych w jednej tabeli z użyciem wartości w drugiej tabeli - użycie podzapytania w klauzuli WHERE lub użycie opcjonalnej klauzuli USING.

DELETE FROM xxx WHERE id IN (SELECT id FROM yyy);
DELETE FROM xxx WHERE EXISTS (SELECT id FROM yyy WHERE xxx.id=yyy.id); 
DELETE FROM xxx USING yyy WHERE xxx.id = yyy.id;
DELETE FROM pracownicy
USING place
WHERE place.stanowisko = pracownicy.stanowisko
AND place.stawka < 4.5
RETURNING *;