Antonoff
@Antonoff
Разработчик

Как исправить ошибку в MSSQL запросе?

Переходим с Oracle на MSSQL, переписываю функции и процедуры. Вот кусок запроса, который выдаёт ошибку:

select @g_count = count(*) from Award where awrd_personid = @personid
and awrd_deleted is null
and awrd_notinuse is null
and (awrd_awardtempid, awrd_discipline) in 
(select awrs_reqawrdtempid, awrs_discipline from awardrestriction 
where (awrs_competitionid = @competitionid or awrs_eventid = @eventid)
and awrs_persontype = 'Judge' and awrs_deleted is null);


Как я понимаю ошибка вылетает именно тут:
..and (awrd_awardtempid, awrd_discipline) in..

Как исправить?
Спасибо
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 2
lasalas
@lasalas
.NET Architect
... and exists
(
select 1
from awardrestriction 
where 
(awrs_competitionid = @competitionid or awrs_eventid = @eventid)
and awrs_persontype = 'Judge' 
and awrs_deleted is null

and awrd_awardtempid = Award.awrd_awardtempid
and awrd_discipline = Award.awrd_discipline
)
Ответ написан
Я бы конструкцию in заменил бы на прямой join (INNER JOIN), вот и всё.
вот так:
select @g_count = count(*) 
from Award 

/*Конструкцию in перенес вот сюда*/
join (
	select awrs_reqawrdtempid, awrs_discipline 
	from awardrestriction 
	where (awrs_competitionid = @competitionid or awrs_eventid = @eventid)
	and awrs_persontype = 'Judge' and awrs_deleted is null
) r on Award.awrd_awardtempid=r.awrs_reqawrdtempid 
	and Award.awrd_discipline=r.awrs_discipline

where awrd_personid = @personid
and awrd_deleted is null
and awrd_notinuse is null
--and (awrd_awardtempid, awrd_discipline) in
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы