PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Актуализация на Postgres от ляво присъединяване

Ето общ начин за преобразуване на тази заявка за актуализиране от формуляр на SQL сървър към 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 е псевдоколона, която сочи към уникалното местоположение на ред. Вместо това можете да използвате първичния ключ на таблицата, ако има такъв.

Заявката №2 от въпроса не прави това, което очаквате, защото актуализираната таблица Users никога не се присъединява към една и съща таблица Users u в клаузата FROM. Точно както когато поставите име на таблица два пъти в клауза FROM, те не се свързват имплицитно или обвързват заедно, те се считат за два независими набора от редове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша съединение с този необичаен критерий за съвпадение?

  2. Прикачете дял LIST към съществуваща таблица в postgres 11

  3. PostgreSQL броят пъти, когато поднизът се появява в текста

  4. Как да шифровате колона в Postgres с помощта на Hibernate @ColumnTransformer

  5. Възможно ли е да се кондензира първичен ключ/сериен?