sql >> Databáze >  >> RDS >> PostgreSQL

Postgres aktualizace z levého připojení

Zde je obecný způsob, jak transformovat tento aktualizační dotaz z formuláře SQL serveru 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 je pseudosloupec, který ukazuje na jedinečné umístění řádku. Místo toho byste mohli použít primární klíč tabulky, pokud by nějaký měla.

Dotaz #2 z otázky nedělá to, co očekáváte, protože aktualizovaná tabulka Users není nikdy připojen ke stejné tabulce Users u v klauzuli FROM. Stejně jako když dvakrát vložíte název tabulky do klauzule FROM, nejsou implicitně spojeny nebo svázány dohromady, jsou považovány za dvě nezávislé sady řádků.



  1. Oprávnění Oracle SQL privelege pro více atributů a tabulek pomocí jednoho příkazu

  2. Oracle SQL Grouping/ordering

  3. mysql(i)_real_escape_string, můžete se na něj bezpečně spolehnout?

  4. Jak získat přístup k mysql mimo můj cluster kubernetes?