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

Откуда: Санкт-Петербург
Сообщений: 15574
Странное вчера обнаружил.
Сделал запрос

Update tbl set col1 =(select col1 from tbl as tbl3 where tbl3.col2=col2 where col1 is not null)
where col1 is null

идея следующая. есть таблица в таблицы сделки купли продажи одна передача товара вторая прием товара. объединены попарно единым ID сделки. в col1 купли Null в col1 продажи - число. надо было из продаж число перекинуть в куплю.

вроде все правильно. но оказалось что пар с одним ID сделки несколько. но числа в col1 одинаковые все равно в продажах в рамках одной дселки (дубли видимо у них были)

Ну я взял в селект вместо col1 сделал max(col1) и опаньке запрос мне стал выдавать максимум по все таблице где col1 not null без учета условия where tbl3.col2=col2. вот собственно и ффсе вопрос. чей то он? или это стандартное поведение.

Чел тут вообще умудрился в скобках селект без фрома написать и без имени таблицы и у него не возникло ошибок апдейта.
MSSQL2005
14 дек 12, 10:32    [13630170]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
DKey
или это стандартное поведение.
Да, стандартное.

Когда вы пишите
where tbl3.col2=col2

это означает
where tbl3.col2=tbl3.col2

подумайте над этим.

Вообще, откуда такая нелюбовь к алиасам? Как серверу понять, откуда брать поля, если человек-то понять не может???
14 дек 12, 10:41    [13630209]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
DKey
Чел тут вообще умудрился в скобках селект без фрома написать и без имени таблицы и у него не возникло ошибок апдейта.
MSSQL2005
Это тоже стандартное, а таких человеком-море.

можно написать (select a,b,c), и это будет корректно, если в таблицах уровнем выше в запросе будут такие поля.

Всегда указывайте, откуда берутся поля, используйте алиасы.
Что бы не ошибиться, делайте это, даже если в запросе только одна таблица, серверу вы этим точно не повредите.
14 дек 12, 10:44    [13630225]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15574
alexeyvg
DKey
или это стандартное поведение.
Да, стандартное.

Когда вы пишите
where tbl3.col2=col2

это означает
where tbl3.col2=tbl3.col2

подумайте над этим.

Вообще, откуда такая нелюбовь к алиасам? Как серверу понять, откуда брать поля, если человек-то понять не может???


То есть предполагаете что если прописать ПОЛНОЕ имя таблицы перед полем то он нормально пережует и с агрегатной функцией? (кстати не помню ставил или не ставил - надо будет проверить) может действительно тупил ввечеру :-)
14 дек 12, 11:09    [13630344]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15574
alexeyvg
DKey
Чел тут вообще умудрился в скобках селект без фрома написать и без имени таблицы и у него не возникло ошибок апдейта.
MSSQL2005
Это тоже стандартное, а таких человеком-море.

можно написать (select a,b,c), и это будет корректно, если в таблицах уровнем выше в запросе будут такие поля.

Всегда указывайте, откуда берутся поля, используйте алиасы.
Что бы не ошибиться, делайте это, даже если в запросе только одна таблица, серверу вы этим точно не повредите.


Даже если он пишет select a,b,c where a=b ?
14 дек 12, 11:10    [13630352]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
DKey
alexeyvg
пропущено...
Это тоже стандартное, а таких человеком-море.

можно написать (select a,b,c), и это будет корректно, если в таблицах уровнем выше в запросе будут такие поля.

Всегда указывайте, откуда берутся поля, используйте алиасы.
Что бы не ошибиться, делайте это, даже если в запросе только одна таблица, серверу вы этим точно не повредите.


Даже если он пишет select a,b,c where a=b ?
Да, а что не так в этой записи???

Попробуйте сами:
select id, (select name where id = id)
from sysobjects
14 дек 12, 11:21    [13630416]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
DKey
То есть предполагаете что если прописать ПОЛНОЕ имя таблицы перед полем то он нормально пережует и с агрегатной функцией?
Ну, прожуёт или нет, нужно посмотреть запрос, может и не в этом дело.

Просто та ошибка очевидна, это типичный непредусмотренный cross join из за неправильного условия.
14 дек 12, 11:24    [13630437]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
iap
Member

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

в первоначальном подзапросе два WHERE
Это, конечно, ошибка копипаста?
14 дек 12, 11:52    [13630592]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15574
Вообщем разобрался тхэнкс - действительно надо было к КАЖДОЙ колонке в подзапросе алиасы присобачивать
14 дек 12, 11:52    [13630593]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15574
iap
DKey,

в первоначальном подзапросе два WHERE
Это, конечно, ошибка копипаста?


именно :-) переборщил
14 дек 12, 12:52    [13631192]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
DKey
именно :-) переборщил

а мне чет кажеться ,что нет
вы хотели проапдейтить поля со значением null ,а без where вся таблица пойдет под апдейт ,которая будет удовлетворять условиям обьединения
14 дек 12, 12:55    [13631225]     Ответить | Цитировать Сообщить модератору
 Re: Добавление агрегатной функции отменило условие выборки  [new]
DKey
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 15574
Maxx
DKey
именно :-) переборщил

а мне чет кажеться ,что нет
вы хотели проапдейтить поля со значением null ,а без where вся таблица пойдет под апдейт ,которая будет удовлетворять условиям обьединения


where tbl3.col2=col2 and col1 is not null --> я имел ввиду что я в подзапросе дважде where употребила надо where и and
14 дек 12, 14:17    [13631934]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить