logo

SQL MERGE-instructie

SQL MERGE-instructie combineert INVOEGEN , VERWIJDEREN , En UPDATE-verklaringen in één enkele vraag.

mysql left join

MERGE-instructie in SQL

De MERGE-instructie in SQL wordt gebruikt om invoeg-, update- en verwijderbewerkingen uit te voeren op een doel tafel gebaseerd op de resultaten van JOIN met a bron tabel . Hierdoor kunnen gebruikers twee tabellen synchroniseren door bewerkingen op één tabel uit te voeren op basis van de resultaten uit de tweede tabel.



De MERGE-instructie vergelijkt gegevens tussen een brontabel en een doeltabel op basis van opgegeven sleutelvelden. Het voert passende acties uit, zoals het invoegen van nieuwe records, het bijwerken van bestaande records en het verwijderen of markeren van records die niet langer in de bron aanwezig zijn.

Deze verklaring biedt een flexibele manier om gegevenswijzigingen te beheren en wordt vaak gebruikt in scenario's zoals onderhoud Langzaam veranderende afmetingen ( SCD ) in SAMENVOEGEN IN target_table
GEBRUIK VAN source_table
AAN merge_condition
ALS DAN GEMATCHT
UPDATE SET kolom1 = waarde1 [, kolom2 = waarde2 …]
ALS DAN NIET GEMATCHT
INSERT (kolom1 [, kolom2 …])
WAARDEN (waarde1 [, waarde2 …]);

Voorbeeld van SQL MERGE-instructie

Stel dat er twee tabellen zijn:



  • PRODUCT LIJST Dit is de tabel die de huidige details bevat over de producten die beschikbaar zijn met de velden P_ID, P_NAME en P_PRICE die overeenkomen met de ID, naam en prijs van elk product.
  • BIJGEWERKTE LIJST Dit is de tabel met de nieuwe details over de producten die beschikbaar zijn met de velden P_ID, P_NAME en P_PRICE die overeenkomen met de ID, naam en prijs van elk product.

twee tafels


De taak is om de details van de producten in de PRODUCT_LIST bij te werken volgens de UPDATED_LIST.

Oplossing



Laten we, om dit voorbeeld beter uit te leggen, het voorbeeld in stappen opsplitsen.

Stap 1: Herken de TARGET- en de SOURCE-tabel

Omdat in dit voorbeeld wordt gevraagd om de producten in de PRODUCT_LIST bij te werken volgens de UPDATED_LIST, zal de PRODUCT_LIST dus fungeren als de TARGET en UPDATED_LIST als de SOURCE-tabel.

doel- en brontabel

Stap 2: Herken de uit te voeren handelingen.

Nu blijkt dat er drie mismatches zijn tussen de TARGET- en de SOURCE-tabel, namelijk:

1. De kosten voor KOFFIE in TARGET bedragen 15,00 en in SOURCE 25,00

 PRODUCT_LIST 102 COFFEE 15.00   UPDATED_LIST 102 COFFEE 25.00>

2. Er is geen BISCUIT-product in SOURCE, maar wel in TARGET

git push-opdracht
 PRODUCT_LIST 103 BISCUIT 20.00>

3. Er is geen CHIPS-product in TARGET, maar wel in SOURCE

 UPDATED_LIST 104 CHIPS 22.00>

Daarom moeten er drie bewerkingen worden uitgevoerd in TARGET, afhankelijk van de bovenstaande discrepanties. Zij zijn:

1. UPDATE-bewerking

102 COFFEE 25.00>

2. WISSEN-bewerking

voor lus-java
103 BISCUIT 20.00>

3. INSERT-bediening

104 CHIPS 22.00>

Stap 3: Schrijf de SQL-query

De SQL-query om bovengenoemde handelingen uit te voeren met behulp van de MERGE-verklaring is:

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 */>

Uitgang:

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

Op deze manier kunnen we al deze drie hoofdinstructies in SQL samen uitvoeren met behulp van de MERGE-instructie.

Opmerking: Elke andere naam dan doel en bron kan worden gebruikt in de MERGE-syntaxis. Ze worden alleen gebruikt om u een betere uitleg te geven.

Belangrijke punten over de SQL MERGE-instructie

  • De SQL MERGE-instructie combineert INVOEGEN , UPDATE , En VERWIJDEREN bewerkingen in één enkele instructie, waardoor efficiënte gegevenssynchronisatie tussen bron- en doeltabellen mogelijk is.
  • Het biedt flexibiliteit bij het aanpassen van complexe SQL-scripts door meerdere gegevensmanipulatiebewerkingen in één transactie uit te voeren.
  • De SQL MERGE-instructie wordt vaak gebruikt in scenario's zoals het onderhouden van Slowly Changing Dimensions (SCD) in datawarehouses.
  • Een goede indexering, geoptimaliseerde joinvoorwaarden en het filteren van de brontabel op noodzakelijke records kunnen de prestaties van de MERGE-instructie optimaliseren.