logo

SQL MERGE-Anweisung

SQL MERGE-Anweisung vereint EINFÜGEN , LÖSCHEN , Und UPDATE-Anweisungen in einer einzigen Abfrage.

10 Millionen

MERGE-Anweisung in SQL

Die MERGE-Anweisung in SQL wird verwendet, um Einfüge-, Aktualisierungs- und Löschvorgänge für a durchzuführen Zieltabelle basierend auf den Ergebnissen von JOIN mit a Quelltabelle . Dadurch können Benutzer zwei Tabellen synchronisieren, indem sie Operationen an einer Tabelle basierend auf den Ergebnissen der zweiten Tabelle ausführen.



Die MERGE-Anweisung vergleicht Daten zwischen einer Quelltabelle und einer Zieltabelle basierend auf angegebenen Schlüsselfeldern. Es führt entsprechende Aktionen aus, z. B. das Einfügen neuer Datensätze, das Aktualisieren vorhandener Datensätze und das Löschen oder Markieren von Datensätzen, die nicht mehr in der Quelle vorhanden sind.

Diese Anweisung bietet eine flexible Möglichkeit zur Verwaltung von Datenänderungen und wird häufig in Szenarien wie der Wartung verwendet Langsam verändernde Dimensionen ( SCD ) In IN „target_table“ ZUSAMMENFÜHREN
USING source_table
ON merge_condition
WENN DANN PASST
UPDATE SET Spalte1 = Wert1 [, Spalte2 = Wert2 …]
WENN NICHT ÜBEREINSTIMMUNG, DANN
INSERT (Spalte1 [, Spalte2 …])
WERTE (Wert1 [, Wert2 …]);

Beispiel für eine SQL MERGE-Anweisung

Angenommen, es gibt zwei Tabellen:



  • PRODUKTLISTE Dies ist die Tabelle, die die aktuellen Details zu den verfügbaren Produkten enthält, wobei die Felder P_ID, P_NAME und P_PRICE der ID, dem Namen und dem Preis jedes Produkts entsprechen.
  • AKTUALISIERTE LISTE Dies ist die Tabelle, die die neuen Details zu den verfügbaren Produkten enthält, wobei die Felder P_ID, P_NAME und P_PRICE der ID, dem Namen und dem Preis jedes Produkts entsprechen.

zwei Tische


Die Aufgabe besteht darin, die Details der Produkte in der PRODUCT_LIST gemäß der UPDATED_LIST zu aktualisieren.

Lösung



Um dieses Beispiel besser zu erklären, teilen wir es nun in Schritte auf.

Schritt 1: Erkennen Sie die TARGET- und SOURCE-Tabelle

Da in diesem Beispiel darum gebeten wird, die Produkte in der PRODUCT_LIST gemäß der UPDATED_LIST zu aktualisieren, fungiert PRODUCT_LIST als TARGET und UPDATED_LIST als SOURCE-Tabelle.

Ziel- und Quelltabelle

Java-Concat-String

Schritt 2: Erkennen Sie die auszuführenden Vorgänge.

Wie nun ersichtlich ist, gibt es drei Nichtübereinstimmungen zwischen der TARGET- und der SOURCE-Tabelle:

1. Die Kosten für KAFFEE betragen in TARGET 15,00 und in SOURCE 25,00

 PRODUCT_LIST 102 COFFEE 15.00   UPDATED_LIST 102 COFFEE 25.00>

2. Es gibt kein BISCUIT-Produkt in SOURCE, aber schon in TARGET

 PRODUCT_LIST 103 BISCUIT 20.00>

3. Es gibt kein CHIPS-Produkt in TARGET, aber in SOURCE

 UPDATED_LIST 104 CHIPS 22.00>

Daher müssen im TARGET entsprechend den oben genannten Abweichungen drei Vorgänge durchgeführt werden. Sie sind:

1. UPDATE-Vorgang

102 COFFEE 25.00>

2. DELETE-Vorgang

char zu int Java
103 BISCUIT 20.00>

3. INSERT-Vorgang

104 CHIPS 22.00>

Schritt 3: Schreiben Sie die SQL-Abfrage

Der SQL-Abfrage um die oben genannten Vorgänge mit Hilfe des durchzuführen MERGE-Anweisung Ist:

SQL
/* Selecting the Target and the Source */ MERGE PRODUCT_LIST AS TARGET  USING UPDATE_LIST AS SOURCE   /* 1. Performing the UPDATE operation */  /* If the P_ID is same,   check for change in P_NAME or P_PRICE */  ON (TARGET.P_ID = SOURCE.P_ID)  WHEN MATCHED   AND TARGET.P_NAME  SOURCE.P_NAME   OR TARGET.P_PRICE  SOURCE.P_PRICE  /* Update the records in TARGET */  THEN UPDATE   SET TARGET.P_NAME = SOURCE.P_NAME,  TARGET.P_PRICE = SOURCE.P_PRICE    /* 2. Performing the INSERT operation */  /* When no records are matched with TARGET table   Then insert the records in the target table */  WHEN NOT MATCHED BY TARGET   THEN INSERT (P_ID, P_NAME, P_PRICE)   VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE)  /* 3. Performing the DELETE operation */  /* When no records are matched with SOURCE table   Then delete the records from the target table */  WHEN NOT MATCHED BY SOURCE   THEN DELETE /* END OF MERGE */>

Ausgabe:

 PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00  102 COFFEE 25.00 104 CHIPS 22.00>

Auf diese Weise können wir alle diese drei Hauptanweisungen in SQL zusammen mit Hilfe der MERGE-Anweisung ausführen.

Notiz: In der MERGE-Syntax kann jeder andere Name als Ziel und Quelle verwendet werden. Sie werden nur verwendet, um Ihnen eine bessere Erklärung zu geben.

Wichtige Punkte zur SQL MERGE-Anweisung

  • Die SQL MERGE-Anweisung kombiniert EINFÜGEN , AKTUALISIEREN , Und LÖSCHEN Operationen in einer einzigen Anweisung zusammenfassen und so eine effiziente Datensynchronisierung zwischen Quell- und Zieltabellen ermöglichen.
  • Es bietet Flexibilität bei der Anpassung komplexer SQL-Skripte, indem es mehrere Datenbearbeitungsvorgänge in einer einzigen Transaktion abwickelt.
  • Die SQL-MERGE-Anweisung wird häufig in Szenarien wie der Verwaltung langsam wechselnder Dimensionen (SCD) in Data Warehouses verwendet.
  • Eine ordnungsgemäße Indizierung, optimierte Join-Bedingungen und das Filtern der Quelltabelle nach erforderlichen Datensätzen können die Leistung der MERGE-Anweisung optimieren.