sql >> Base de Datos >  >> RDS >> PostgreSQL

Actualización de Postgres desde la combinación izquierda

Esta es una forma genérica de transformar esta consulta de actualización del formulario del servidor SQL a 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 es una pseudocolumna que apunta a la ubicación única de una fila. Podría usar en su lugar la clave principal de la tabla si tuviera una.

La consulta n.º 2 de la pregunta no hace lo que esperaba porque la tabla actualizada Users nunca se une a la misma tabla Users u en la cláusula FROM. Al igual que cuando coloca el nombre de una tabla dos veces en una cláusula FROM, no se unen o vinculan implícitamente, se consideran como dos conjuntos independientes de filas.