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

Откуда:
Сообщений: 325
SELECT *
FROM dbo.fn_GetCustomerAccountBettingSummaryContentFull (NULL, 1, NULL, NULL, 4405, NULL, NULL, '2009-05-14 00:00:00.000', '2009-05-15 23:59:59.000', 1, 1, 'day') g
	INNER JOIN #EntityList e
		ON ISNULL(e.EntityListId,g.CustomerId)=g.CustomerId
цель в следующем во временной таблице лежит перечень CustomerId по которым join но есть исключение если там пусто то тогда брать все. По логике вроде бы все правельно но в случае NULL не работает :( Подскажите в чем я ошибся
PS sql server 2005
19 июн 09, 12:08    [7319866]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
В случае NULL нельзя использовать оператор "="
Только IS NULL или IS NOT NULL
19 июн 09, 12:13    [7319892]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
iljy
Guest
gen-217,
в каком смысле - там пусто? во временной таблице ни одной записи? так и не получите ничего тогда, join работает со строками, и если строк нет - и соединять нечего.
19 июн 09, 12:15    [7319909]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
gen-217
Member

Откуда:
Сообщений: 325
не совсем вас понля
ISNULL(e.EntityListId,g.CustomerId)
в случе если EntityListId = NULL вернет мне g.CustomerId и получица join сам на себя тоеть полный выбор или я чето не понял
19 июн 09, 12:16    [7319915]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
Glory
Member

Откуда:
Сообщений: 104760
SELECT *
FROM #EntityList e
LEFT OUTER JOIN dbo.fn_GetCustomerAccountBettingSummaryContentFull (NULL, 1, NULL, NULL, 4405, NULL, NULL, '2009-05-14 00:00:00.000', '2009-05-15 23:59:59.000', 1, 1, 'day') g
		ON e.EntityListId=g.CustomerId
19 июн 09, 12:19    [7319925]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
Zum-Zum
Member

Откуда: Ukraine
Сообщений: 160
В приведенном Вами запросе каждая строка "g" будет сочетаться со всеми строками "e", для которых либо e.EntityListId=g.CustomerId, либо e.EntityListId is null. Вы этого хотели?
19 июн 09, 12:19    [7319927]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
gen-217
Member

Откуда:
Сообщений: 325
все я понял спасибо за помощь
19 июн 09, 12:19    [7319930]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
iljy
Guest
gen-217,

т.е. в #EntityList строки есть, но содержат значение NULL? тогда да, но есть исключение: если g.CustomerId тоже null - операция g.CustomerId = g.CustomerId вернет вам NULL, а не TRUE, т.е. условие не выполнится.
19 июн 09, 12:19    [7319931]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
gen-217
не совсем вас понля
ISNULL(e.EntityListId,g.CustomerId)
в случе если EntityListId = NULL вернет мне g.CustomerId и получица join сам на себя тоеть полный выбор или я чето не понял
CASE WHEN e.EntityListId IS NULL THEN g.CustomerId ELSE e.EntityListId END
?
19 июн 09, 12:21    [7319939]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
PaulYoung
gen-217
не совсем вас понля
ISNULL(e.EntityListId,g.CustomerId)
в случе если EntityListId = NULL вернет мне g.CustomerId и получица join сам на себя тоеть полный выбор или я чето не понял
CASE WHEN e.EntityListId IS NULL THEN g.CustomerId ELSE e.EntityListId END
?
Не увидел в первом посте INNER JOIN...
19 июн 09, 12:23    [7319951]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Условие
ISNULL(e.EntityListId,g.CustomerId)=g.CustomerId
для
e.EntityListId IS NULL
будет выглядеть так;
g.CustomerId=g.CustomerId
которое эквивалентно такому
g.CustomerId IS NOT NULL
ибо
NULL=NULL
даёт UNDEFINED, которое в качестве результата ON трактуется как FASLE
19 июн 09, 12:25    [7319967]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
gen-217
Member

Откуда:
Сообщений: 325
а каким способом можно реализовать мою проблему?
во временной таблице храница перечень CustomerId по которым нужно сделать выборку из dbo.fn_GetCustomerAccountBettingSummaryContentFull но в слуае если нужно делать по всем времненная таблица #EntityList я думал через JOIN но помойму не это не самая лучшая идея
19 июн 09, 12:27    [7319993]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
Glory
Member

Откуда:
Сообщений: 104760
Проблему вы уже реализовали
А задача join-а таблицы и табличной функции SQL2005 реализована через CROSS APPLY
Описание которой есть в так не любимом вами BOL-е

Сообщение было отредактировано: 19 июн 09, 12:32
19 июн 09, 12:30    [7320011]     Ответить | Цитировать Сообщить модератору
 Re: подмкажите в чем я не прав  [new]
gen-217
Member

Откуда:
Сообщений: 325
iap, спасибо за ликбез
19 июн 09, 12:30    [7320014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить