Radera och uppdatera rader med Inner Join i SQL Server

Innerföreningen används för att välja rader från flera tabeller baserat på en matchande kolumn i en eller flera tabeller. Det jämför varje radvärde för en tabell med varje radvärde för en annan tabell för att hitta samma värden. Om lika värde finns i flera kolumner från flera tabeller, returneras de i resultatuppsättningen.

Basic Inner Gå med i syntaxen

VÄLJ T1.Kolumner, T2. Kolumner FRÅN Tabell 1 som T1 INNER JOIN TILLBAKA Tabell 2 T2 PÅ T1.Pk_Table1_Rowid = T2.Table2_Rowid; 

Inner Join Exempel

IF OBJECT_ID ('Table1', 'U') ÄR INTE NULL DROP TABLE Tabell 1 SKAPA TABELL Tabell 1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') ÄR INTE NULL DROP TABLE Tabell 2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Infoga i tabell1-värden (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Infoga i tabell2-värden (1, 'Mango'), (2, 'Graps'), (4, 'Orange'); VÄLJ * från tabell1; VÄLJ * från tabell2; VÄLJ * FRÅN BORD1 T1 Inner Anslut Tabell 2 T2 PÅ T1. Id = T2. Id; 

Uppdatering med Inner Join i SQL Server

Med samma begrepp Innerförening kan vi uppdatera rader i ett bord baserat på ett annat bord med Inner Join.

Syntax för uppdatering med Inner Join

UPPDATERA T2 SET T2. Namn = T1 .Name FRÅN TABELL2 som T2 INNER JOIN TABELL1 som T1 ON T1. Id = T1. Id; 

För att förenkla syntaxen är T2 ett aliasnamn för tabell2, vars rader vi vill uppdatera baserat på matchande rader med tabell1. På klausul anges kolumnnamnen för att hitta matchande rader mellan båda tabellerna med Inner Join. SET anger tabell2-kolumnen Namnet kommer att uppdateras med värden i tabell1-namnspalten.

Uppdatera med Inner Join Exempel

IF OBJECT_ID ('Table1', 'U') ÄR INTE NULL DROP TABLE Tabell 1 SKAPA TABELL Tabell 1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') ÄR INTE NULL DROP TABLE Tabell 2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Infoga i tabell1-värden (1, 'Mango'), (2, 'Graps'), (3, 'Banana'); Infoga i tabell2-värden (1, 'Mango'), (2, NULL), (3, NULL); VÄLJ * från tabell1; VÄLJ * från tabell2; UPPDATERA T2 SET T2. FruitName = T1. FruitName FROM Table2 som T2 INNER JOIN Table1 som T1 ON T1. Id = T2. Id; VÄLJ * från tabell1; VÄLJ * från tabell2; 

I exemplet ovan uppdateras NULL-värdena rader i tabell 2 med tabell 1 rader baserat på en matchande ID-kolumn.

Innan uppdatering med Inre Join

Efter uppdatering med Inre Join

Ta bort med Inner Join

Med samma begrepp Innerförening kan vi radera rader från ett bord baserat på en annan tabell med Inner Join.

Syntax för radering med Inner Join

Ta bort T2 från tabell2 som T2 INNER JOIN Table1 som T1 ON T1. Id = T1. Id; 

För att förenkla syntaxen är T2 ett aliasnamn för tabell2, vars rader vi vill ta bort baserat på matchande rader med tabell1. På klausul anges kolumnnamn för att hitta matchande rader mellan båda tabellerna med Inner Join.

IF OBJECT_ID ('Table1', 'U') ÄR INTE NULL DROP TABLE Tabell 1 SKAPA TABELL Tabell 1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') ÄR INTE NULL DROP TABLE Tabell 2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Infoga i tabell1-värden (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (4, 'WaterMelon'), (5, 'Orange'); Infoga i tabell2-värden (1, 'Mango'), (2, 'Graps'), (3, 'Banana'), (6, 'Pear'), (7, 'Papaya'); VÄLJ * från tabell1; VÄLJ * från tabell2; Ta bort T2 från tabell2 som T2 INNER JOIN Table1 som T1 ON T1. Id = T2. Id; VÄLJ * från tabell1; VÄLJ * från tabell2; 

I exemplet ovan raderas rader med id (1,2,3) från tabell T2 eftersom det matchar med tabell1 (id) kolumn med inre medlem.

Innan Ta bort med Inner Join

Efter borttagning med Inner Join

För närvarande stöder inte SQL-servern rader från båda tabellerna med ett raderingsuttag som andra RDBMS.

Se även SQL Server Archives