Här är ett allmänt sätt att omvandla denna uppdateringsfråga från SQL-serverform till 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 är en pseudo-kolumn som pekar på den unika platsen för en rad. Du kan istället använda den primära nyckeln i tabellen om den hade en sådan.
Frågan #2 från frågan gör inte vad du förväntar dig eftersom den uppdaterade tabellen Users
är aldrig ansluten till samma tabell Users u
i FROM-klausulen. Precis som när du lägger ett tabellnamn två gånger i en FROM-sats, blir de inte implicit sammanfogade eller sammanbundna, de betraktas som två oberoende uppsättningar rader.