MSSQL выдает ошибки связывания

oleg34

 use bd_740;
update a
set a.KRA_INT = d.HA+(c.H2-b.H1)*(a.KR_int-(b.H1-d.HA/(c.H2-e.HA-b.H1+d.HA) - f.ALT_R
from perf a
left join
(select top 1 idskv, H as H1 from inca where inca.idskv=a.idskv and H<a.kr_int order by H1 desc) b on b.idskv=a.idskv
left join
(select top 1 idskv, H as H2 from inca where inca.idskv=a.idskv and H>a.kr_int order by H2 desc) c on с.idskv=a.idskv
left join
inca d on d.idskv=a.idskv and d.H=b.H1
left join
inca e on e.idskv=a.idskv and e.H=c.H2
left join
BSKV f on f.idskv=a.idskv where a.RO_SRD>0

Данный код компилируется со следующими ошибками. Как от них избавиться?

Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.idskv" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.kr_int" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.idskv" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.kr_int" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "с.idskv" could not be bound.

dava

Эээ... кажется, подзапрос в инлайн-вью и подзапрос в exists различаются, и не только в ms sql. В первом нельзя использовать внешние альясы, на что у тебя ругань и идёт (альяс "a" у тебя объявлен вне подзапросов).

mbolik1

Попробуй left join заменить на сross apply

oleg34


use bd_740;
select a.KRA_INT=d.HA+(e.HA-d.HA)*(a.KR_INT-b.H1)/(c.H2-b.H1+0.00000000001)- f.ALT_R
from perf a
left join
(select top 1 perf.IDSKV, H as H1 from perf left join inca on perf.idskv =inca.idskv and H<KR_INT
order by H1 desc ) b on b.IDskv=a.IDskv
left join
(select top 1 perf.IDSKV as IDSKV, H as H2 from perf left join inca on perf.idskv =inca.idskv
and H>KR_INT order by H2 ) c on c.IDskv=a.IDskv
left join
inca d on d.IDskv=a.IDskv and d.H=b.H1
left join
inca e on e.IDskv=a.IDskv and e.H=c.H2
left join
BSKV f on f.IDskv=a.IDskv
where a.RO_SRD>0

Данный вариант компилится, но ничего не записывается, с чем может быть вызвано это?

hprt

что значит ничего? Ничего не возвращает? Тогда т.к. у тебя все джойны левые, проблемы с основной таблицей или условием WRE. И да, правильно насчет apply советует, только аналог левого джойна - outer apply.

oleg34

что значит ничего? Ничего не возвращает? Тогда т.к. у тебя все джойны левые, проблемы с основной таблицей или условием WRE. И да, правильно насчет apply советует, только аналог левого джойна - outer apply.
NULL в смысле.

hprt

перепиши на apply. У тебя во всех подзапросах выбирается по одной строчке, но они не соответствуют условиям джойна

SergeRRRRRR

ты же вроде не IT'шником работаешь?

hprt

Flossy тоже :grin:

oleg34

спасибо, заработало
Оставить комментарий
Имя или ник:
Комментарий: