Удаление диапазона строк из таблицы на основе другой таблицы в качестве входных данных в SQL

#sql #sql-server #tsql

Вопрос:

Я использую SQL Server. Мне нужна помощь, чтобы удалить диапазон строк из таблицы 1, используя входные значения и соответствующие идентификаторы из таблицы 2.

Таблица 1

РовИд SetId
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
1 2
2 2
3 2
4 2

Таблица 2

Начало ЭндИд SetId
2 3 1
6 8 1
1 2 2

Таблица Результатов

РовИд SetId
1 1
4 1
5 1
9 1
3 2
4 2

До сих пор это нерабочий код, который у меня есть. Я хочу удалить идентификаторы строк из таблицы 1, где они больше или равны и меньше или равны идентификаторам начала и конца таблицы 2 и имеют соответствующие идентификаторы SetId из таблицы 1.

 Delete From Table1
Where RowId >= 
(Select StartId From Table2 Where Table1.SetId = Table2.SetId) 
and RowId <= 
(Select EndId From Table2 Where Table1.SetId = Table2.SetId) 
 

Ответ №1:

Вы можете использовать not exists :

 select * from table1 t1
where not exists (
select 1
from table2 t2
where t1.RowId between t2.StartId and t2.EndId
and t1.setid = t2.setid
)
 

и если вы хотите удалить эти строки:

 delete from table1 t1
where exists (
select 1
from table2 t2
where t1.RowId between t2.StartId and t2.EndId
and t1.setid = t2.setid
)