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

Откуда:
Сообщений: 416
добрый день всем,

надо сравнить выполнение соединения таблиц в ms sql.

есть 2 таблицы:в одной 2 поля(t1_1,t1_2),в другой тоже 2 (t2_1,t2_2). Надо выбрать из первой все то,чего нет во второй. Сравните плиз 3 варианта джойна по времени,если кто может:

1) select t1_2 from t1 where t1_2 not in (select t2_1 from t2);
2) select a.t1_2 from t1 a, t2 b where a.t1_2<>b.t2_1;
3) select t1_2 from t1 left join t2 on t1.t1_2=t2.t2_1;


спасибо всем откликнувшимся!
Сам работаю на оракле,а этот пример нужно узнать на ms sql.
15 мар 12, 19:15    [12256361]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
1) 0
2) 0
3) 0
15 мар 12, 19:18    [12256376]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
это не учитывая тот факт, что 2 и 3 варианты - неправильные
да и первый - не очень то
15 мар 12, 19:19    [12256379]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
LudeV
Member

Откуда:
Сообщений: 416
locky,я

почему второй и третий неправильные?

допустим в каждой таблице по 1000 строк..мне важен сам факт,что из этого выполняется быстрее при всех остальных равных
15 мар 12, 19:25    [12256397]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
AndyD
Member

Откуда:
Сообщений: 30
во втором у вас для каждой строки t1 выберутся все строки t2, для которых t1_2 != t2_1

В третьем, надо бы добавить еще
where t2.t2_1 is null
15 мар 12, 19:30    [12256413]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
LudeV
Member

Откуда:
Сообщений: 416
AndyD,

согласен полностью. Ошибся



тогда вопрос остался между 1 и 3 с условием этого замечания.

посмотрите плиз
15 мар 12, 19:40    [12256458]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
iljy
Member

Откуда:
Сообщений: 8711
LudeV,

1й тоже неправильный, будет очень интересно, если вторая таблица допускает NULL. Самые быстрые и правильные варианты будут not exists либо except, left join в большинстве случаев проиграет.
15 мар 12, 20:04    [12256532]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
LudeV
Member

Откуда:
Сообщений: 416
iljy,

а если мы в первом изменим where t1_2 not in (select distinct t2_1 from t2 where t2_1 is not null)


спасибо большое
15 мар 12, 20:10    [12256549]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
mantap
Member

Откуда:
Сообщений: 72
По вашему объяснению задачи, вот решение:

SELECT *
FROM t1
WHERE t1_1 NOT IN (SELECT t2_1 FROM t2) AND t1_2 NOT IN (SELECT t2_2 FROM t2);
15 мар 12, 20:14    [12256556]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
LudeV
Member

Откуда:
Сообщений: 416
mantap,

не.. Вы меня неправильно поняли: из первой таблицы надо выбрать все,где в поле t1_2 есть такое значение, которого нет в поле t2_1 таблицы t2

остальные поля не интересуют
15 мар 12, 20:17    [12256563]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
iljy
Member

Откуда:
Сообщений: 8711
LudeV
iljy,

а если мы в первом изменим where t1_2 not in (select distinct t2_1 from t2 where t2_1 is not null)


спасибо большое

Тогда в 99% случаев будет то же, что и not exists. И distinct там совсем не нужен.
15 мар 12, 20:21    [12256585]     Ответить | Цитировать Сообщить модератору
 Re: выполните плиз селект на ms sql  [new]
LudeV
Member

Откуда:
Сообщений: 416
iljy,

спасибо большое
15 мар 12, 20:23    [12256589]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить