Löschen und Aktualisieren von Zeilen mit Inner Join in SQL Server

Inner Join wird verwendet, um Zeilen aus mehreren Tabellen basierend auf einer übereinstimmenden Spalte in einer oder mehreren Tabellen auszuwählen. Er vergleicht jeden Zeilenwert einer Tabelle mit jedem Zeilenwert einer anderen Tabelle, um gleiche Werte zu finden. Wenn gleiche Werte in mehreren Spalten aus mehreren Tabellen gefunden werden, werden sie in der Ergebnismenge zurückgegeben.

Grundlegende Inner Join-Syntax

SELECT T1.Columns, T2. Spalten FROM Tabelle1 als T1 INNER JOIN Tabelle2 T2 ON T1.Pk_Table1_Rowid = T2.Table2_Rowid; 

Inner Join Beispiel

IF OBJECT_ID ('Table1', 'U') IST NICHT NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') IST NICHT NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Einfügen in Tabelle1 Werte (1, 'Mango'), (2, 'Graps'), (3, 'Banane'); Einfügen in Tabelle2 Werte (1, 'Mango'), (2, 'Graps'), (4, 'Orange'); SELECT * FROM Tabelle1; SELECT * FROM Table2; SELECT * FROM Table1 T1 Innerer Verbund Table2 T2 ON T1. Id = T2 .Id; 

Update mit Inner Join in SQL Server

Mit demselben Konzept wie Inner Join können wir Zeilen in einer Tabelle basierend auf einer anderen Tabelle mit Inner Join aktualisieren.

Syntax für das Update mit Inner Join

UPDATE T2 SET T2. Name = T1 .Name FROM Table2 als T2 INNER JOIN Table1 als T1 ON T1. Id = T1 .Id; 

Zur Vereinfachung der Syntax ist T2 ein Aliasname für Table2, dessen Zeilen wir basierend auf übereinstimmenden Zeilen mit Table1 aktualisieren möchten. On-Klausel gibt die Spaltennamen an, um mit Inner Join passende Zeilen zwischen beiden Tabellen zu finden. SET gibt an, dass die Table2-Spalte Name mit Werten der Table1-Namensspalte aktualisiert wird.

Update mit Inner Join-Beispiel

IF OBJECT_ID ('Table1', 'U') IST NICHT NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') IST NICHT NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Einfügen in Tabelle1 Werte (1, 'Mango'), (2, 'Graps'), (3, 'Banane'); Einfügen in Tabelle2 Werte (1, 'Mango'), (2, NULL), (3, NULL); SELECT * FROM Tabelle1; SELECT * FROM Table2; UPDATE T2 SET T2. FruitName = T1 .FruitName FROM Table2 als T2 INNER JOIN Table1 als T1 ON T1. Id = T2 .Id; SELECT * FROM Tabelle1; SELECT * FROM Table2; 

Im obigen Beispiel werden Zeilen mit NULL-Werten in Table2 mit Table1-Zeilen basierend auf einer übereinstimmenden ID-Spalte aktualisiert.

Vor dem Update mit Inner Join

Nach dem Update mit Inner Join

Mit Inner Join löschen

Mit demselben Konzept wie Inner Join können wir Zeilen aus einer Tabelle basierend auf einer anderen Tabelle löschen, indem Inner Join verwendet wird.

Syntax für Löschen mit Inner Join

LÖSCHEN Sie T2 FROM Table2 als T2 INNER JOIN Table1 als T1 ON T1. Id = T1 .Id; 

Zur Vereinfachung der Syntax ist T2 ein Aliasname für Table2, dessen Zeilen wir basierend auf übereinstimmenden Zeilen mit Table1 löschen möchten. On-Klausel gibt Spaltennamen an, um mit Inner Join übereinstimmende Zeilen zwischen beiden Tabellen zu finden.

IF OBJECT_ID ('Table1', 'U') IST NICHT NULL DROP TABLE Table1 CREATE TABLE Table1 (Id INT, FruitName Varchar (100)); IF OBJECT_ID ('Table2', 'U') IST NICHT NULL DROP TABLE Table2 CREATE TABLE Table2 (Id INT, FruitName Varchar (100)); Einfügen in Tabelle1 Werte (1, 'Mango'), (2, 'Graps'), (3, 'Banane'), (4, 'Wassermelone'), (5, 'Orange'); Einfügen in Tabelle 2 Werte (1, "Mango"), (2, "Graps"), (3, "Banane"), (6, "Birne"), (7, "Papaya"); SELECT * FROM Tabelle1; SELECT * FROM Table2; LÖSCHEN Sie T2 FROM Table2 als T2 INNER JOIN Table1 als T1 ON T1. Id = T2 .Id; SELECT * FROM Tabelle1; SELECT * FROM Table2; 

Im obigen Beispiel werden Zeilen mit der ID (1,2,3) aus der Tabelle T2 gelöscht, da sie mit der Table1-Spalte (Id) mit Inner Join übereinstimmen.

Vor dem Löschen mit Inner Join

Nach dem Löschen mit Inner Join

Derzeit unterstützt SQL Server das Löschen von Zeilen aus beiden Tabellen nicht, wenn eine Löschanweisung wie bei anderen RDBMS verwendet wird.

Siehe auch SQL Server-Archive