SQL Server MERGE (Suomi)
Yhteenveto: Tässä opetusohjelmassa opit käyttämään SQL Server -palvelinta MERGE
lauseke päivittää taulukon tiedot toisen taulukon vastaavien arvojen perusteella.
Johdanto SQL Server MERGE -lauseke
Oletetaan, että sinulla on kaksi taulukkoa, joita kutsutaan lähde- ja kohdetaulukoiksi, ja sinun on päivitä kohdetaulukko lähdetaulukosta sovitettujen arvojen perusteella. On olemassa kolme tapausta:
- Lähdetaulukossa on joitain rivejä, joita ei ole kohdetaulukossa. Tässä tapauksessa sinun on lisättävä lähdetaulukossa olevia rivejä kohdetaulukkoon.
- Kohdetaulukossa on joitain rivejä, joita ei ole lähdetaulukossa. Tässä tapauksessa sinun on poistettava rivit kohdetaulukosta.
- Lähdetaulukossa on joitain rivejä, joilla on samat avaimet kuin kohdetaulukon riveillä. Näillä riveillä on kuitenkin erilaiset arvot avaimien ulkopuolisissa sarakkeissa. Tässä tapauksessa sinun on päivitettävä kohdetaulukon rivit lähdetaulukon arvoilla.
Seuraava kuva kuvaa lähde- ja kohdetaulukot vastaavilla toiminnoilla: insert, päivitä ja poista:
Jos käytä INSERT
, UPDATE
ja DELETE
-lauseketta erikseen, sinun on rakennettava kolme erillistä lauseet päivittää tiedot kohdetaulukkoon lähdetaulukon vastaavilla riveillä.
SQL Server tarjoaa kuitenkin lauseen MERGE
, jonka avulla voit suorittaa kolme toimia samanaikaisesti. Seuraava näyttää MERGE
-lausekkeen syntaksin:
Code language: SQL (Structured Query Language) (sql)
Määritä ensin kohdetaulukko ja lähde MERGE
-lausekkeen taulukko.
Toiseksi merge_condition
määrittää, miten lähdetaulukon rivit vastaavat kohdetaulukon rivit. Se on samanlainen kuin liittymisehdon liittymisehdossa. Tyypillisesti käytät avainsarakkeita joko ensisijaisella avaimella tai yksilöivällä avaimella.
Kolmanneksi merge_condition
johtaa kolmeen tilaan: MATCHED
, NOT MATCHED
ja NOT MATCHED BY SOURCE
.
-
MATCHED
: nämä ovat rivit, jotka vastaavat yhdistämisehtoa. Kaaviossa ne näkyvät sinisinä. Vastaavia rivejä varten sinun on päivitettävä kohdetaulukon rivisarakkeet lähdetaulukon arvoilla. -
NOT MATCHED
: nämä ovat lähteen rivit taulukossa, jossa kohdetaulukossa ei ole yhtään riviä. Kaaviossa ne näkyvät oransseina. Tässä tapauksessa sinun on lisättävä rivit lähdetaulukosta kohdetaulukkoon. Huomaa, ettäNOT MATCHED
tunnetaan myös nimelläNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: nämä ovat kohdetaulukon rivit, jotka eivät vastaa yhtään lähdetaulukon riviä. Ne näkyvät kaaviossa vihreinä. Jos haluat synkronoida kohdetaulukon lähdetaulukon tietojen kanssa, sinun on käytettävä tätä vastaavuusehtoa rivejen poistamiseksi kohdetaulukosta.
SQL Server MERGE -esimerkki
Oletetaan, että meillä on kaksi taulukkoa sales.category
ja sales.category_staging
, jotka tallentavat myynnin tuoteryhmittäin.
Jos haluat päivittää tiedot sales.category
(kohdetaulukko) -arvoon sales.category_staging
(lähdetaulukko) -arvoon, käytä seuraavaa MERGE
-lauseke:
Tässä esimerkissä käytimme yhdistämisehtona molempien taulukoiden category_id
-sarakkeiden arvoja.
- Ensinnäkin rivit tunnisteilla 1, 3, 4
sales.category_staging
-taulukosta vastaa kohdetaulukon rivejä, siksi lausekeMERGE
päivittää arvot luokan nimi ja summa -sarakkeissasales.category
-taulukossa. - Toiseksi
sales.category_staging
-taulukon rivejä, joiden tunnus on 5 ja 6, ei ole olemassasales.category
-taulukossa, joten lausekeMERGE
lisää nämä rivit kohdetaulukkoon. - Kolmanneksi rivi tunnuksella 2
sales.category
-taulukosta ei olesales.sales_staging
-taulukossa, jotenMERGE
-lauseke poistaa tämän rivin.
Sulautumisen seurauksena sales.category
-taulukon tiedot synkronoidaan täysin taulukon tietojen kanssa. sales.category_staging
taulukko.
Tässä opetusohjelmassa olet oppinut käyttämään SQL Server MERGE
-käskyä muutosten tekoon taulukossa toisen taulukon vastaavien arvojen perusteella.