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

Откуда:
Сообщений: 20504
Добрый день!

Пробую так:

INSERT Table1
SELECT MIN(A), B
FROM Table2
WHERE B NOT IN (SELECT B FROM Table1)
GROUP BY B;

или правильнее так:

INSERT Table1
SELECT MIN(A), B
FROM Table2
GROUP BY B HAVING B NOT IN (SELECT B FROM Table1);

?
4 сен 13, 12:01    [14793346]     Ответить | Цитировать Сообщить модератору
 Re: WHERE или HAVING ?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34703
defragmentator,

Первое, с WHERE.
В having указывают условия, накладываемые на агрегированные поля после агрегации.
4 сен 13, 12:25    [14793560]     Ответить | Цитировать Сообщить модератору
 Re: WHERE или HAVING ?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
HAVING применяется в условиях с агрегированными данными.
1 пример правильный.
4 сен 13, 12:26    [14793568]     Ответить | Цитировать Сообщить модератору
 Re: WHERE или HAVING ?  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Работают оба варианта, хотя и мне 1 - й кажется правильнее.
4 сен 13, 12:39    [14793688]     Ответить | Цитировать Сообщить модератору
 Re: WHERE или HAVING ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
defragmentator
Работают оба варианта, хотя и мне 1 - й кажется правильнее.
Это случайно так получилось.
Из-за
GROUP BY B HAVING B ...
То есть условие в HAVING накладывается именно на то поле, по которому GROUP BY.
Думаю, оптимизатор не дурак и даже планы одинаковые строит для этих двух запросов.
Хотя, я планы не смотрел
4 сен 13, 12:45    [14793722]     Ответить | Цитировать Сообщить модератору
 Re: WHERE или HAVING ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Планы могут быть разные и второй вариант может быть даже лучше по IO. Но оба варианта неправильно работают, если в Table1.B допустимы null.
Так что лучше where ... not exists(select ...), а еще лучше merge.
4 сен 13, 12:52    [14793767]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить