#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
)