PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Aktualizacja Postgres z lewego przyłączenia

Oto ogólny sposób przekształcenia tego zapytania aktualizującego z postaci serwera SQL na 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 to pseudokolumna, która wskazuje na unikalną lokalizację wiersza. Możesz zamiast tego użyć klucza podstawowego tabeli, jeśli taki ma.

Zapytanie #2 z pytania nie spełnia oczekiwań, ponieważ zaktualizowana tabela Users nigdy nie jest dołączany do tej samej tabeli Users u w klauzuli FROM. Podobnie jak w przypadku dwukrotnego umieszczenia nazwy tabeli w klauzuli FROM, nie zostaną one niejawnie połączone ani powiązane ze sobą, są traktowane jako dwa niezależne zestawy wierszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Programowo wyprodukuj obiekt `DataSource` dla Postgres JDBC

  2. Spark SQL 2.0:NullPointerException z prawidłowym zapytaniem PostgreSQL

  3. Railsy - wyszukuj tylko rekordy, w których istnieje has_wiele powiązanych rekordów

  4. Postgres Brak uprawnień do tworzenia użytkownika

  5. Skopiuj dane między dwiema tabelami w PostgreSQL za pomocą dblink.sql