Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So aktualisieren Sie von SELECT in SQL Server

In den meisten Fällen werden SQL-Updates unter Verwendung von direkten Verweisen durchgeführt zu einer bestimmten Tabelle (UPDATE books SET books.title = 'The Hobbit' WHERE books.id = 1 ). Gelegentlich kann es sich jedoch als vorteilhaft erweisen, den Inhalt einer Tabelle indirekt zu ändern , indem eine Teilmenge von Daten verwendet wird, die aus der sekundären Abfrageanweisung stammen.

Durchführen eines UPDATE mit einem sekundären SELECT -Anweisung kann auf zwei Arten ausgeführt werden, hauptsächlich abhängig davon, welche Version von SQL Server Sie verwenden. Wir werden beide Optionen kurz untersuchen, damit Sie herausfinden können, was für Sie am besten funktioniert.

INNER JOINS verwenden

Für alle SQL Server-Installationen ist die einfachste Methode zum Ausführen dieser Aktion die Verwendung eines INNER JOIN , wobei Werte in den Spalten zweier verschiedener Tabellen miteinander verglichen werden.

UPDATE
  books
SET
  books.primary_author = authors.name
FROM
  books
INNER JOIN
  authors
ON
  books.author_id = authors.id
WHERE
  books.title = 'The Hobbit'

Im obigen Beispiel UPDATING wir der books.primary_author Feld so, dass es mit authors.name übereinstimmt für „Der Hobbit“ von JOINING beide Tabellen in der Abfrage auf ihre jeweiligen übereinstimmenden Werte von authors.id und books.author_id .

Verwendung von MERGE zum gleichzeitigen UPDATE und INSERT

Für SQL Server 2008 und neuer hat Microsoft das außerordentlich nützliche MERGE eingeführt Vorgang, der dem obigen INNER JOIN ähnlich ist Methode, aber MERGE versucht, sowohl ein UPDATE durchzuführen und ein INSERT Befehl zusammen. Dadurch werden die beiden Tabellen basierend auf der durchgeführten Abfrage effektiv synchronisiert und Datensätze nach Bedarf aktualisiert und eingefügt, damit die beiden übereinstimmen.

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id
WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name
WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

Die vollständige Abfrage bei Verwendung von MERGE ist sicherlich etwas komplexer als ein einfacher INNER JOIN , aber sobald Sie verstehen, wie die Operation funktioniert, werden Sie schnell verstehen, wie leistungsfähig diese Funktion wirklich sein kann.

Die ersten paar Zeilen sind ziemlich selbsterklärend:

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id

Wir wollen MERGE INTO (UPDATING /INSERT ) die books Tabelle, indem Sie die sekundären authors verwenden Tabelle, und wir gleichen die beiden basierend auf derselben books.author_id = authors.id ab Vergleich.

Wo der MERGE Der Befehl unterscheidet sich in der folgenden Verzweigungslogik.

WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name

Hier fordern wir SQL auf, nur dann eine Aktion auszuführen, wenn Datensätze MATCHED sind – wenn ein vorhandener Datensatz gefunden wird. In diesem Fall führen wir ein standardmäßiges UPDATE durch genauso wie wir es zuvor getan haben, indem wir books.primary_author setzen gleich dem authors.name Feld.

Schließlich, wenn die Abfrage einen übereinstimmenden Vergleichsdatensatz entdeckt, der nicht vorhanden ist existieren, führen wir stattdessen ein INSERT durch .

WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

Hier bitten wir SQL einfach um INSERT einen neuen Eintrag in die books Tabelle und Übergabe der Werte für die author_id und primary_author Felder, die den zugehörigen authors entnommen wurden Tabellendatensatz.

Das Endergebnis unseres MERGE Aussage ist die für jeden author in den authors Tabelle prüfen wir, ob ein entsprechendes Buch in books existiert . Wenn ein Datensatz gefunden wird, stellen wir sicher, dass books.primary_author wird mit UPDATE gesetzt , und wenn keine Übereinstimmung gefunden wird, fügen wir books einen neuen Datensatz hinzu .

Damit sollten Sie ein solides Verständnis von zwei verschiedenen Methoden haben, die zum UPDATE verwendet werden können Datensätze in SQL mithilfe von sekundärem, vergleichendem SELECT Aussagen.