2010-08-13 2 views
0

Я хочу сделать что-то подобное ниже. У меня есть псевдо-логика ниже. Просто интересно, как это реализовать:T-sql диапазон Запрос

delete B 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber <= B.startipnum and A.Endnumber >= B.endipnum 

delete A 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber => B.startipnum and A.Endnumber <= B.endipnum 

update B 
set endipnum = startnumber - 1 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber < B.startipnum and A.Endnumber <= B.endipnum 

update B 
set startipnum = endnumber + 1 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber >= B.startipnum and A.Endnumber > B.endipnum 

Примеры данных

Таблица A

BeginNumber EndNumber 
----------  --------- 
16843009 16843009 
16843009 16843010 
16843009 16843013 
16843009 16843016 
33686020 33686024 

TableB

startipnum endIPNum 
----------  --------- 
1488047401 1488047401 
1504824617 1873923369 
1890700585 1907477801 
1924255017 2142358825 
2159136041 2276576553 

Там нет колонн к J между двумя таблицами. Пожалуйста, помогите.

Спасибо!

+0

Можете ли вы предоставить несколько строк данных образца из таблицы A и таблицы B? Я не совсем понимаю, что вам нужно делать. –

+0

Я добавил его к общему вопросу выше. Форматирование становится испорченным. Пожалуйста, посмотрите. – sharadov

+0

Я исправил форматирование (поместите таблицы в кодовые блоки для сохранения макета), поэтому для данных примера, которые вы предоставили, должны быть результаты для выполнения запросов 1,2,3 и 4? –

ответ

0

Нет ничего, что могло бы помешать вам выполнить соединение с предложением on, например. ON 1=1 - который присоединится ко всем - аналогично, CROSS JOIN достигает того же (и это лучший способ сделать это TBH).

Смежные вопросы