Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычесть одну выборку из другой  [new]
malov77
Member

Откуда:
Сообщений: 15
Доброго времени суток!
Уважаемые гуру SQL, подскажите, пожалуйста.
Есть две таблицы T1 и T2 примерно с таким содержанием:

T1
ID1 ID2
1 1
1 2
1 3
1 4
1 5
1 6
2 1
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4
3 5

и Т2
ID1 ID2
1 1
1 2
1 5
1 6
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4

Т.е. в Т2 есть все значения Т1.ID1, но не все Т1.ID2.
Мне нужно такую выборку, в результате которой будет вот такой результат:

ID1 ID2
1 3
1 4
2 1
3 5

Т.е. чтобы ID1 был в обеих таблицах, а ID2 наоборот, был в T1, но не было в T2, но с учётом что это персонально для каждого ID1, как бы группами, а не просто целиком весь столбец ID2 отфильтровать.
Спасибо заранее!
7 апр 15, 10:04    [17482091]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
malov77,

NOT EXISTS
7 апр 15, 10:06    [17482100]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
Glory
Member

Откуда:
Сообщений: 104751
from tab1 where not exists()
7 апр 15, 10:06    [17482103]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1843
SELECT ID1, ID2 FROM T1
EXCEPT
SELECT ID1, ID2 FROM T2

https://msdn.microsoft.com/ru-ru/library/ms188055.aspx
7 апр 15, 10:32    [17482221]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
malov77
Member

Откуда:
Сообщений: 15
Спасибо! Оба варианта подходят.
Не знаю какой выбрать.. интересно какой будет работать быстрее.
7 апр 15, 10:39    [17482261]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1843
malov77
Спасибо! Оба варианта подходят.
Не знаю какой выбрать.. интересно какой будет работать быстрее.

Сравните планы обоих запросов и выберите оптимальный в вашем варианте
7 апр 15, 10:46    [17482301]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Если запрос с NOT EXISTS не содержит DISTINCT, то, вообще говоря,
это запросы, которые могут вернуть разный результат.
Но нужен ли этот DISTINCT (который всегда неявно есть в EXCEPT)?
7 апр 15, 10:49    [17482318]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
malov77
Member

Откуда:
Сообщений: 15
ID1 и ID2 в обеих таблицах не повторяются, они обязательно уникальны.
Т.е. из-за DISTINCT в EXCEPT оно может работать дольше?
7 апр 15, 11:12    [17482450]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1843
malov77
ID1 и ID2 в обеих таблицах не повторяются, они обязательно уникальны.
Т.е. из-за DISTINCT в EXCEPT оно может работать дольше?

Не гадайте на кофейной гуще. Посмотрите в план запросов.
7 апр 15, 11:13    [17482454]     Ответить | Цитировать Сообщить модератору
 Re: Вычесть одну выборку из другой  [new]
malov77
Member

Откуда:
Сообщений: 15
В смысле связка ID1+ID2 уникальна.. ID1 конечно повторяется..
7 апр 15, 11:13    [17482455]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить