sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres uppdatering från vänster gå med

Här är ett allmänt sätt att omvandla denna uppdateringsfråga från SQL-serverform till 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 är en pseudo-kolumn som pekar på den unika platsen för en rad. Du kan istället använda den primära nyckeln i tabellen om den hade en sådan.

Frågan #2 från frågan gör inte vad du förväntar dig eftersom den uppdaterade tabellen Users är aldrig ansluten till samma tabell Users u i FROM-klausulen. Precis som när du lägger ett tabellnamn två gånger i en FROM-sats, blir de inte implicit sammanfogade eller sammanbundna, de betraktas som två oberoende uppsättningar rader.



  1. Scrabble ordsökare med jokertecken

  2. Rails 3-migreringar:boolesk (mysql vs postgreSQL)

  3. MySql-infogningen i den valda frågan är för långsam för att kopiera 100 miljoner rader

  4. Varför blir resultatet av COUNT dubbelt när jag går med två?