Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL Löscht alle Zeilen aus einer Tabelle, wenn die Unterabfrage fehlerhaft ist

Als TableAID existiert nicht in TableA verwendet die Abfrage die Spalte aus TableB . Daher ist die Abfrage dieselbe wie:

delete from TableB
where id in (
  select TableB.TableAID
  from TableA
  where GUID = 'fdjkhflafdhf'
)

Im Wesentlichen macht es also:

delete from TableB
where id in (TableAID)

Wenn Sie Unterabfragen verwenden, ist es am besten, Ihre Tabellennamen beim Verweisen zu erwähnen. Die folgenden WERDEN eine Ausnahme auslösen:

 delete from TableB
    where id in (
      select TableA.TableAID
      from TableA
      where TableA.GUID = 'fdjkhflafdhf'
    )

Außerdem würde ich einen Alias ​​verwenden, damit wir wissen, auf welche Abfrage wir uns beziehen:

 delete from TableB
    where id in (
      select a.TableAID
      from TableA a
      where a.GUID = 'fdjkhflafdhf'
    )