Hier is een algemene manier om deze update-query te transformeren van SQL-serverformulier naar 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 is een pseudo-kolom die verwijst naar de unieke locatie van een rij. Je zou in plaats daarvan de primaire sleutel van de tabel kunnen gebruiken als die er was.
De vraag #2 van de vraag doet niet wat je verwacht omdat de bijgewerkte tabel Users
wordt nooit aan dezelfde tabel toegevoegd Users u
in de FROM-clausule. Net zoals wanneer u een tabelnaam twee keer in een FROM-clausule plaatst, ze niet impliciet worden samengevoegd of gekoppeld, ze worden beschouwd als twee onafhankelijke sets rijen.