538 Stimmen

T-SQL: Auswählen von zu löschenden Zeilen über Joins

Szenario:

Nehmen wir an, ich habe zwei Tabellen, TabelleA und TabelleB. Der Primärschlüssel von TabelleB ist eine einzelne Spalte (BId) und ist eine Fremdschlüsselspalte in TabelleA.

In meiner Situation möchte ich alle Zeilen in TabelleA entfernen, die mit bestimmten Zeilen in TabelleB verknüpft sind: Kann ich das durch Joins erreichen? Alle Zeilen löschen, die aus den Joins gezogen werden?

DELETE FROM TableA 
FROM
   TableA a
   INNER JOIN TableB b
      ON b.BId = a.BId
      AND [my filter condition]

Oder bin ich gezwungen, dies zu tun:

DELETE FROM TableA
WHERE
   BId IN (SELECT BId FROM TableB WHERE [my filter condition])

Der Grund für meine Frage ist, dass mir die erste Option bei größeren Tabellen viel effizienter zu sein scheint.

Gracias.

1voto

Carlos Barini Punkte 129

Der einfachere Weg ist:

DELETE TableA
FROM TableB
WHERE TableA.ID = TableB.ID

1voto

1c1cle Punkte 423
DELETE FROM table1
where id IN 
    (SELECT id FROM table2..INNER JOIN..INNER JOIN WHERE etc)

Minimieren Sie die Verwendung von DML-Abfragen mit Joins. Sie sollten in der Lage sein, die meisten DML-Abfragen mit Unterabfragen wie oben zu erledigen.

Im Allgemeinen sollten Joins nur verwendet werden, wenn Sie SELECT oder GROUP nach Spalten in 2 oder mehr Tabellen benötigen. Wenn Sie nur mehrere Tabellen berühren, um eine Grundgesamtheit zu definieren, verwenden Sie Unterabfragen. Für DELETE-Abfragen, verwenden Sie korrelierte Unterabfragen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X