Ето общ начин за преобразуване на тази заявка за актуализиране от формуляр на SQL сървър към PostgreSQL:
UPDATE Users
SET bUsrActive = false
WHERE
ctid IN (
SELECT u.ctid FROM Users u
LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = 1 AND u2.bUsrActive = 1
WHERE u.bUsrAdmin = 0 AND u.bUsrActive = 1 AND u2.nkUsr IS NULL
)
ctid е псевдоколона, която сочи към уникалното местоположение на ред. Вместо това можете да използвате първичния ключ на таблицата, ако има такъв.
Заявката №2 от въпроса не прави това, което очаквате, защото актуализираната таблица Users
никога не се присъединява към една и съща таблица Users u
в клаузата FROM. Точно както когато поставите име на таблица два пъти в клауза FROM, те не се свързват имплицитно или обвързват заедно, те се считат за два независими набора от редове.