2016-05-19 23 views
1

Ich habe zwei Tabellen. Ich muss eine Spalte in einer Tabelle mit '1' und '0' aktualisieren. Mit '1', wobei E_ID in beiden Spalten übereinstimmt und '0', wo E_ID nicht in der zweiten Tabelle vorhanden ist.
Hinweis: Eine Tabelle enthält alle E_IDs, die zweite Tabelle enthält eine Teilmenge der E_IDs. Keine der Spalten E_ID in beiden Geschichten enthält NULL.Update mit dem Fall, wenn vorhanden Klausel

Die Abfrage unten führt nur den ersten Teil des Jobs aus (aktualisiert auf '1').

UPDATE [MIDASFactory].[dbo].[Employees] 
SET [Changed To Residential] = 1 
FROM ##formerEmployees t 
INNER JOIN [dbo].[Employees] (NOLOCK) 
    ON t.e_ID = E_ID 

Ich modifizierte die Abfrage oben, um auch mit '1' und '0' wie oben beschrieben zu aktualisieren.

Aber es funktioniert nicht richtig, da es alle Zeilen auf den ersten Wert aktualisiert durch die Auswahlunter Klausel in der Abfrage zurück unten, wo E_ID in beiden Tabellen übereinstimmen.

UPDATE [dbo].[Employees] 
SET [Current Employee] = 
    CASE WHEN EXISTS (SELECT * FROM [dbo].[Employees] P (NOLOCK) 
         LEFT OUTER JOIN ##formerEmployees t (NOLOCK) ON P.E_ID=t.e_ID) 
      THEN 1 
      ELSE 0 
     END 
FROM ##formerEmployees t 

Antwort

3

Sie haben Ihre Unterabfrage nicht mit Ihrer UPDATE-Abfrage (Mitarbeiter) korreliert. Wahrscheinlich dachtest du, dass du das mit deinem JOIN machst, aber du hast gerade einen zweiten, separaten Verweis auf Employees erstellt, der nicht mit deiner äußeren Anfrage korreliert.

sollte diese Arbeit:

UPDATE e 
SET [Current Employee] = 
    CASE WHEN EXISTS (SELECT * FROM ##formerEmployees t (NOLOCK) WHERE e.E_ID=t.e_ID) 
      THEN 1 
      ELSE 0 
     END 
FROM [dbo].[Employees] e 
+0

Dank. Perfekt arbeiten. – enigma6205