sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres opdatering fra venstre join

Her er en generisk måde at transformere denne opdateringsforespørgsel fra SQL-serverformular til 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 er en pseudo-søjle, der peger på den unikke placering af en række. Du kunne i stedet bruge den primære nøgle i tabellen, hvis den havde en.

Forespørgslen #2 fra spørgsmålet gør ikke, hvad du forventer, fordi den opdaterede tabel Users er aldrig knyttet til den samme tabel Users u i FROM-klausulen. Ligesom når du indsætter et tabelnavn to gange i en FROM-sætning, bliver de ikke implicit forbundet eller bundet sammen, de betragtes som to uafhængige sæt rækker.



  1. Hvordan opdaterer jeg fra en SELECT i SQL Server?

  2. Hvad betyder max_connections egentlig?

  3. Er dette en rigtig lang meningsmåling?

  4. Sådan åbnes en database i eksklusiv tilstand i Access 2016