Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

T-SQL Usuwa wszystkie wiersze z tabeli, gdy podzapytanie jest zniekształcone

Jako TableAID nie istnieje w TableA , zapytanie używa kolumny z TableB . Dlatego zapytanie jest takie samo jak:

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

Więc w istocie to robi:

delete from TableB
where id in (TableAID)

Jeśli używasz podzapytań, najlepiej podać nazwy tabel podczas odwoływania się. Następujące BĘDZIE zrzuć wyjątek:

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

Ponadto użyłbym aliasu, abyśmy wiedzieli, do którego zapytania się odnosimy:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego SQL Server 2008 Management Studio Intellisense nie działa?

  2. Przywróć wiele plików .bak programu SQL Server

  3. Podstawy łączenia wewnętrznego SQL Server z przykładami

  4. Kolejność warunkowa T-SQL według

  5. CTE, aby uzyskać wszystkie dzieci (potomków) rodzica