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

Откуда:
Сообщений: 33
Коллеги, доброе утро!
Подскажите, пожалуйста, как корректно описать условие равенства между двумя разными столбцами разных таблиц?
На данный момент упираюсь в ошибку:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Запрос:
declare @count int = 0
declare @owner uniqueidentifier = (select ownerid from dbo.filteredappointment)
declare @party uniqueidentifier = (select distinct partyid from dbo.filteredactivityparty)
if @owner = @party
 begin
	set 
		@count = 
			(select count (*) 
			from dbo.filteredactivityparty act_party
			where 
				act_party.partyobjecttypecode = 8
				and (act_party.participationtypemask = 5 
				or act_party.participationtypemask = 6))
 end
else 
	set @count = 
			((select count (*) 
			from dbo.filteredactivityparty act_party
			where 
				act_party.partyobjecttypecode = 8
				and (act_party.participationtypemask = 5 
				or act_party.participationtypemask = 6)) + 1)


Заранее спасибо.
24 июл 12, 11:25    [12907126]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
ArghBuzz

SIZE=1]Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.


Увас жен пишет ошибку. При чем тут сравнение.
Ошибка происходит здесь
declare @owner uniqueidentifier = (select ownerid from dbo.filteredappointment)
declare @party uniqueidentifier = (select distinct partyid from dbo.filteredactivityparty)


Из-за тогог что один из или оба запроса возвращабт более 1-го значения
24 июл 12, 11:27    [12907140]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
Alexandr Kr.,

Да, верно. Первый возвращает 2 значения, второй 75.
Не могу пока понять как сделать так, чтобы @count принимал значения только при условии равенства @owner и @party.
24 июл 12, 11:30    [12907162]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
Glory
Member

Откуда:
Сообщений: 104751
ArghBuzz
Не могу пока понять как сделать так, чтобы @count принимал значения только при условии равенства @owner и @party.

Изучить JOIN и написать запрос с его использованием
24 июл 12, 12:43    [12907771]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
Подскажите, пожалуйста, как я могу использовать JOIN в данном запросе?
Добавить его (join) сюда или таким запросом не получится достичь вышеописанной цели?
24 июл 12, 15:54    [12909190]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
ArghBuzz
Первый возвращает 2 значения, второй 75.
И какое с каким вы собираетесь сравнивать?
24 июл 12, 16:01    [12909246]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
ArghBuzz
Member

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

мне нужно условие, что какой-то из двух равен какому-то из 75.
24 июл 12, 16:02    [12909252]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
ArghBuzz
invm,

мне нужно условие, что какой-то из двух равен какому-то из 75.


используйте
exists
24 июл 12, 16:14    [12909372]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
select
 @count = count(*) + case when exists(select * from dbo.filteredappointment a cross join dbo.filteredactivityparty b where a.ownerid = b.partyid) then 1 else 0 end 
from
 dbo.filteredactivityparty act_party
where 
 act_party.partyobjecttypecode = 8
 and (act_party.participationtypemask = 5 or act_party.participationtypemask = 6);
24 июл 12, 16:40    [12909554]     Ответить | Цитировать Сообщить модератору
 Re: Поиск одинаковых guid в разных таблицах  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
Всем спасибо за помощь. Решил загвоздку так:

Declare @count int = (select count (*) 
			from dbo.filteredactivityparty act_party
			where 
				act_party.partyobjecttypecode = 8
				and (act_party.participationtypemask = 5 
				or act_party.participationtypemask = 6))
select 
		(isnull (ap.actualdurationminutes, 0) / 60 + 
			case 
				when (act_party.partyid = ap.ownerid) then 1 else 0 
			end
) 
		as sum_duration
........
24 июл 12, 16:40    [12909559]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить