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

Откуда: ☭
Сообщений: 72991
MSSQL 2008 R2 (RTM) - 10.50.1600.1 (X64)

Есть такая вьюшка:
ALTER view [dbo].[cvGateWorkingEmployee] as
select distinct (
	select top 1 EmployeeJobID 
	from tblEmployeeJob EJi 
	where EJi.EmployeeID = EJ.EmployeeID 
	order by IsMain desc) EmployeeJobID, 
	EmployeeID
from tblEmployeeJob EJ
where DismissalDate is null and EmployeeID>0
И запрос типа:

select ..., трампампам.Image
from cvGateWorkingEmployee
inner join трампампам
where ...
union
select ..., Null
from cvGateWorkingEmployee
inner join трампампам
where ...
По отдельности две части запроса выполняются как задумывалось, а вместе выдают "Тип данных image нельзя выбирать в качестве DISTINCT".
Почему так?
13 май 11, 17:01    [10649500]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Image
какого типа?
13 май 11, 17:07    [10649541]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Konst_One
Image
какого типа?


а так у вас он image и есть =) тогда всё верно даёт ошибку
13 май 11, 17:07    [10649545]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
По отдельности две части запроса выполняются как задумывалось, а вместе выдают "Тип данных image нельзя выбирать в качестве DISTINCT".
Почему так?

Потому что это запрещено
13 май 11, 17:10    [10649561]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Glory
Antonariy
По отдельности две части запроса выполняются как задумывалось, а вместе выдают "Тип данных image нельзя выбирать в качестве DISTINCT".
Почему так?

Потому что это запрещено
Запрещено применять distinct к image, это понятно, непонятно каким боком distinct из вьюшки, где нет image, мешает внешнему запросу. Причем только в конструкции с union.
13 май 11, 17:14    [10649588]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Glory
пропущено...

Потому что это запрещено
Запрещено применять distinct к image, это понятно, непонятно каким боком distinct из вьюшки, где нет image, мешает внешнему запросу. Причем только в конструкции с union.

А вы вот поставили в свой запрос union, не читая, как работает эта команда ?
13 май 11, 17:15    [10649601]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
GlebZ
Member

Откуда: USA
Сообщений: 286
Поставьте UNION ALL
13 май 11, 17:29    [10649690]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
А где об этом прочитать? Здесь написано лишь что она делает, но не как. Либо я не понял. :(
В bol от sql2000, который у меня есть локально, написано побольше, но опять же подсказку не увидел.
13 май 11, 17:33    [10649711]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
union без all подразумевает distinct.
13 май 11, 17:33    [10649714]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Maxx
Member [скрыт]

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

странно , вот прямо написано ведь,прямо по вашей ссылке
автор
UNION
Specifies that multiple result sets are to be combined and returned as a single result set.

ALL
Incorporates all rows into the results. This includes duplicates. If not specified, duplicate rows are removed.
13 май 11, 17:35    [10649733]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Prolog
union без all подразумевает distinct.
Во, спасибо, в bol об этом не так явно написано. Я даже искал distinct на странице, но не догадался о "подразумевает".
13 май 11, 17:40    [10649762]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Prolog
union без all подразумевает distinct.
Во, спасибо, в bol об этом не так явно написано.

Ну да, If not specified, duplicate rows are removed - это совсем неявно.
13 май 11, 17:41    [10649772]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Склероз прошел, я ведь когда-то видел строчку UNION [ALL] [DISTINCT] в каком-то хелпе.
13 май 11, 17:42    [10649795]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Склероз прошел, я ведь когда-то видел строчку UNION [ALL] [DISTINCT] в каком-то хелпе.

Это вы видели в хелпах по агрегатным функциям
AVG ( [ ALL | DISTINCT ] expression )
13 май 11, 17:44    [10649804]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72991
Glory
Ну да, If not specified, duplicate rows are removed - это совсем неявно.
Я не настолько крут в tsql, чтобы подсознательно понимать, что duplicate rows are removed это всегда distinct.
13 май 11, 17:46    [10649816]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
iljy
Member

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

это надо понимать осознанно. DISTINCT - это что такое по вашему?
13 май 11, 17:48    [10649826]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
iap
Member

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

А ещё есть EXCEPT и INTERSECT
Microsoft пока реализовала только разновидности без ALL этих операторов. Так что осторожнее!

http://msdn.microsoft.com/ru-ru/library/ms188055(v=SQL.100).aspx
13 май 11, 19:54    [10650336]     Ответить | Цитировать Сообщить модератору
 Re: Distinct, который как бы не при делах, обламывает запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Glory
Ну да, If not specified, duplicate rows are removed - это совсем неявно.
Я не настолько крут в tsql, чтобы подсознательно понимать, что duplicate rows are removed это всегда distinct.

BOL
The DISTINCT keyword eliminates duplicate rows from the results of a SELECT statement.
14 май 11, 00:26    [10651159]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить