PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cập nhật postgres từ tham gia bên trái

Đâ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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails đặt lại TẤT CẢ các chuỗi Postgres?

  2. Postgresql làm thế nào để chọn các giá trị trong cột từ một bảng mà chỉ có sẵn trong một bảng khác?

  3. Postgres đang bỏ qua chỉ mục dấu thời gian, tại sao?

  4. PostgreSQL có sử dụng tf-idf không?

  5. Hàm thực thi nhanh hơn mà không có công cụ sửa đổi NGHIÊM TÚC?