Postgres update von left join

Ich bin neu in PostgreSQL und versuchen, zu konvertieren, eine Abfrage von SQL Server.

Ich habe eine Tabelle Benutzer mit unter anderem den Spalten bUsrActive, bUsrAdmin und sUsrClientCode. Ich möchte aktualisieren von Benutzern und bUsrActive = false, wenn es nicht vorhanden ist ein anderer Benutzer mit dem gleichen sUsrClientCode wo bUsrAdmin = true und bUsrActive = true.

In SQL-Server habe ich diese Abfrage

UPDATE u SET u.bUsrActive = 0
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

Ich versuche zu konvertieren, das auf postgres. Ich schrieb 3 Ansätze.

1) Mein Erster Versuch. Natürlich nicht.

UPDATE Users u
    SET bUsrActive = false
FROM Users u2
WHERE u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = true AND u2.bUsrActive = true
AND u.bUsrAdmin = false AND u.bUsrActive = true AND u2.nkUsr IS NULL;

2) ich verstehe, warum es nicht funktioniert (es updates alle Benutzer). Ich kann einfach nicht herausfinden, wie kann ich die Verweis-Tabelle Benutzer u in der UPDATE ... SET Teil.

UPDATE Users
    SET bUsrActive = false
FROM Users u
LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = true AND u2.bUsrActive = true
WHERE u.bUsrAdmin = false AND u.bUsrActive = true AND u2.nkUsr IS NULL;

3) Die folgenden arbeiten, aber nicht mit join.

UPDATE Users
    SET bUsrActive = false
WHERE  NOT EXISTS (
    SELECT 1
    FROM Users u
    WHERE u.sUsrClientCode = Users.sUsrClientCode AND u.bUsrAdmin = true AND u.bUsrActive = true
) AND Users.bUsrAdmin = false AND Users.bUsrActive = true;

Wohl mit die Letzte Lösung. Ich wollte nur wissen, ob es möglich ist, zu tun, was ich will mit einem left join.

  • Was ist falsch mit dem Dritten?
  • Nichts, es funktioniert. Einfach Fragen, wenn ich es tun kann, der andere Weg mit Verknüpfungen. Scheint schöner für das Auge! Ich denke, das wäre die Leistung die gleiche ist.
  • Der zweite sollte funktionieren (auf den ersten Blick), was ist die Fehlermeldung, die Sie erhalten?. Sind Sie sich bewusst, dass die Semantik der FROM Klausel ist anders in PostgreSQL im Vergleich zu SQL Server?
  • Ich bin neu und lernen. Der zweite wird alle aktualisieren der Datensätze in Tabelle Users, nicht nur die "Benutzer u".
InformationsquelleAutor alfoks | 2013-01-24
Schreibe einen Kommentar