この更新クエリを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 行の一意の場所を指す疑似列です。テーブルに主キーがある場合は、代わりに主キーを使用できます。
更新されたテーブルUsers
のため、質問のクエリ#2は期待どおりに機能しません 同じテーブルに結合されることはありませんUsers u
FROM句で。 FROM句にテーブル名を2回入力した場合と同様に、テーブル名は暗黙的に結合またはバインドされないため、2つの独立した行のセットと見なされます。