Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL Използване на Cross-Apply с оператор Delete

Не виждам никакво предимство в използването на cross apply тук. Ето едно просто решение, което върши работа:

declare @t table(recordid int)
declare @tableone table(recordid int)
declare @tabletwo table(recordid int)
declare @tablethree table(recordid int)
insert @t values(101),(102),(103),(104),(105),(106)

insert @tableone values(101),(102),(103),(104)
insert @tablethree values(101),(102)

delete t
from @t t
where not exists (select 1 from @tableone where t.recordid = recordid)
and exists (select 1 from @tableone)
or not exists (select 1 from @tabletwo where t.recordid = recordid)
and exists (select 1 from @tabletwo)
or not exists (select 1 from @tablethree where t.recordid = recordid)
and exists (select 1 from @tablethree)

Резултат:

recordid
101
102


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пакет за настройка на Spotlight Basic:Най-добрият безплатен инструмент за оптимизиране на SQL

  2. Изберете само последната стойност на датата?

  3. Каква е разликата между използването на кръстосано свързване и поставянето на запетая между двете таблици?

  4. Как мога да преместя таблица в друга файлова група в MS SQL Server?

  5. Как мога да изброя всички външни ключове, препращащи към дадена таблица в SQL Server?