sql >> Database >  >> RDS >> PostgreSQL

Postgres-update van linker join

Hier is een algemene manier om deze update-query te transformeren van SQL-serverformulier naar 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 is een pseudo-kolom die verwijst naar de unieke locatie van een rij. Je zou in plaats daarvan de primaire sleutel van de tabel kunnen gebruiken als die er was.

De vraag #2 van de vraag doet niet wat je verwacht omdat de bijgewerkte tabel Users wordt nooit aan dezelfde tabel toegevoegd Users u in de FROM-clausule. Net zoals wanneer u een tabelnaam twee keer in een FROM-clausule plaatst, ze niet impliciet worden samengevoegd of gekoppeld, ze worden beschouwd als twee onafhankelijke sets rijen.



  1. Hoe een microseconde-precisie datetime in te voegen in mysql?

  2. Trigger met samenvoegen-instructie in orakel

  3. Voorwaarden toevoegen in MERGE-instructie in Oracle SQL voor INSERT/UPDATE

  4. Is de id-kolompositie in Postgresql belangrijk?