Đây là một cách chung để chuyển đổi truy vấn cập nhật này từ dạng SQL-server sang 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 là một cột giả trỏ đến vị trí duy nhất của một hàng. Thay vào đó, bạn có thể sử dụng khóa chính của bảng nếu nó có khóa.
Truy vấn số 2 từ câu hỏi không thực hiện những gì bạn mong đợi vì bảng được cập nhật Users
không bao giờ được tham gia vào cùng một bảng Users u
trong mệnh đề FROM. Cũng giống như khi bạn đặt tên bảng hai lần trong mệnh đề FROM, chúng không được liên kết hoặc ràng buộc ngầm với nhau, chúng được coi là hai tập hợp hàng độc lập.