Her er en generisk måde at transformere denne opdateringsforespørgsel fra SQL-serverformular til 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 er en pseudo-søjle, der peger på den unikke placering af en række. Du kunne i stedet bruge den primære nøgle i tabellen, hvis den havde en.
Forespørgslen #2 fra spørgsmålet gør ikke, hvad du forventer, fordi den opdaterede tabel Users
er aldrig knyttet til den samme tabel Users u
i FROM-klausulen. Ligesom når du indsætter et tabelnavn to gange i en FROM-sætning, bliver de ikke implicit forbundet eller bundet sammen, de betragtes som to uafhængige sæt rækker.