Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL Supprime toutes les lignes d'une table lorsque la sous-requête est mal formée

Comme TableAID n'existe pas dans TableA , la requête utilise la colonne de TableB . Par conséquent, la requête est la même que :

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

Donc, en gros, ça marche :

delete from TableB
where id in (TableAID)

Si vous utilisez des sous-requêtes, il est préférable de mentionner les noms de vos tables lors du référencement. Le VOLONTÉ suivant lancer une exception :

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

De plus, j'utiliserais un alias pour que nous sachions à quelle requête nous nous référons :

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