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.

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.

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.