Heim >Datenbank >MySQL-Tutorial >Wie lösche ich Zeilen aus mehreren SQL Server-Tabellen mithilfe von INNER JOIN?

Wie lösche ich Zeilen aus mehreren SQL Server-Tabellen mithilfe von INNER JOIN?

DDD
DDDOriginal
2025-01-07 06:09:41399Durchsuche

How to Delete Rows from Multiple SQL Server Tables Using INNER JOIN?

Löschen aus mehreren Tabellen mit INNER JOIN in SQL Server

Im Gegensatz zu MySQL unterstützt SQL Server das Löschen aus mehreren Tabellen mithilfe von nicht direkt INNER JOIN. Sie können jedoch den gleichen Effekt mit der folgenden Problemumgehung erzielen:

Schritt 1: Verwenden Sie die Pseudotabelle „Gelöscht“

Erstellen Sie eine temporäre Tabelle mit dem Namen „@deletedIds“ um die IDs gelöschter Zeilen aus der ersten Tabelle zu speichern:

begin transaction;

declare @deletedIds table ( id int );

delete from t1
output deleted.id into @deletedIds
from table1 as t1
 inner join table2 as t2
   on t2.id = t1.id
 inner join table3 as t3
   on t3.id = t2.id;

Schritt 2: Löschen aus Nachfolgende Tabellen

Verwenden Sie die Tabelle „@deletedIds“, um aus nachfolgenden Tabellen zu löschen:

delete from t2
from table2 as t2
 inner join @deletedIds as d
   on d.id = t2.id;

delete from t3
from table3 as t3 ...

Schritt 3: Transaktion festschreiben

Übernehmen Sie die Transaktion, um die Änderungen vorzunehmen permanent:

commit transaction;

Hinweis:Sie können gelöschte.id aus der zweiten Löschanweisung ausgeben, wenn dies für die Verknüpfung mit der dritten Tabelle erforderlich ist.

Alternativer Ansatz : Trigger

Erwägen Sie die Verwendung eines Triggers für Tabelle1, der automatisch aus Tabelle2 und Tabelle3 löscht, wenn eine Zeile aus gelöscht wird Tabelle1. Dies stellt die referenzielle Integrität sicher und macht ein manuelles Löschen überflüssig.

Das obige ist der detaillierte Inhalt vonWie lösche ich Zeilen aus mehreren SQL Server-Tabellen mithilfe von INNER JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn