Zde je obecný způsob, jak transformovat tento aktualizační dotaz z formuláře SQL serveru na 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 je pseudosloupec, který ukazuje na jedinečné umístění řádku. Místo toho byste mohli použít primární klíč tabulky, pokud by nějaký měla.
Dotaz #2 z otázky nedělá to, co očekáváte, protože aktualizovaná tabulka Users
není nikdy připojen ke stejné tabulce Users u
v klauzuli FROM. Stejně jako když dvakrát vložíte název tabulky do klauzule FROM, nejsou implicitně spojeny nebo svázány dohromady, jsou považovány za dvě nezávislé sady řádků.