Witajcie,
Stosunkowo od niedawna zajmuję się MSSQL (wcześniej PostgreSQL i Oracle) i natknąłem na dziwny problem. Otóż mam zapytanie:
select case when s1.IDDictStatuses is null then cast([TO].IDDictStatus as varchar) else s1.StatusName end as "StatusOperatora",
[e].IDDictStatus "StatusZadania"
from dbo.Task t, dbo.TaskExt e, dbo.TaskOperators [TO]
left outer join dbo.DictStatuses s1 on ([TO].IDDictStatus = s1.IDDictStatuses)
where t.IDTask = 10101
and t.IDTask = e.IDTask
and t.IDTask = [TO].IDTask
Zasadniczo zapytanie zwraca mi dwie kolumny z nazwą zadania operatora i numerem statusu samego zadania. Niby wszystko pięknie ale chciałbym jednak pokazać nazwę zamiast numeru statusu zadania no więc przerabiamy zapytanie na poniższe:
select case when s1.IDDictStatuses is null then cast([TO].IDDictStatus as varchar) else s1.StatusName end as "StatusOperatora",
case when s2.IDDictStatuses is null then cast(e.IDDictStatus as varchar) else s2.StatusName end as "StatusZadania"
from dbo.Task t, dbo.TaskExt e, dbo.TaskOperators [TO]
left outer join dbo.DictStatuses s1 on ([TO].IDDictStatus = s1.IDDictStatuses)
left outer join dbo.DictStatuses s2 on (e.IDDictStatus = s2.IDDictStatuses)
where t.IDTask = 10101
and t.IDTask = e.IDTask
and t.IDTask = [TO].IDTask
i ku mojemu zdziwieniu (bo taka składania zarówno w PostgreSQL jak i Oracle działa bezproblemowo) dostaję komunikat:
The multi-part identifier "e.IDDictStatus" could not be bound.
Jak zamienię we FROM kolejność dbo.TaskExt i dbo.TaskOperators to wywala:
The multi-part identifier "TO.IDDictStatus" could not be bound.
Dlaczego nie da się tego załatwić taką składnią i w jaki sposób byście rozwiązali ten problem?