столкнулся с непонятностью в MS SQL в использовнии этого соединения таблиц с помьщью =*
Кратко: запрос
SELECT c_event.d_ev,
c_event.c_event,
C_EVENT.c_cus_se c_custom,
c_event.c_event
m_doc_sr.customer
FROM (select m_doc_sr.c_event, lpu.customer from ic_as.dbo.m_doc_sr, ic_as.dbo.c_custom lpu
where m_doc_sr.c_cus_my = LPU.c_custom) m_doc_sr,
dbo.c_event
WHERE m_doc_sr.c_event =* c_event.c_event
т.е. невозможно привязать к таблице, кот. перед =* (в моем случае m_doc_sr.c_event) еще что нибудь. Хотя идет полная однозначность, привязка должна быть по c_event, т.е. тех c_event кот. нет в m_doc_sr должен выставляться NULL.
выдается ошибка
Msg 303, Level 16, State 1, Line 1
The table 'dbo.m_doc_sr' is an inner member of an outer-join clause. This is not allowed if the table also participates in a regular join clause.
Как это реализовать?
Спасибо
Re: невозможно привязать к таблице кот. участвует в =* MS SQ
Здравствуйте, vlaban, Вы писали:
V>столкнулся с непонятностью в MS SQL в использовнии этого соединения таблиц с помьщью =* V>Кратко: запрос
V>SELECT c_event.d_ev, V>c_event.c_event, V>C_EVENT.c_cus_se c_custom, V>c_event.c_event V>m_doc_sr.customer V>FROM (select m_doc_sr.c_event, lpu.customer from ic_as.dbo.m_doc_sr, ic_as.dbo.c_custom lpu V>where m_doc_sr.c_cus_my = LPU.c_custom) m_doc_sr, V>dbo.c_event V>WHERE m_doc_sr.c_event =* c_event.c_event
V>т.е. невозможно привязать к таблице, кот. перед =* (в моем случае m_doc_sr.c_event) еще что нибудь. Хотя идет полная однозначность, привязка должна быть по c_event, т.е. тех c_event кот. нет в m_doc_sr должен выставляться NULL.
V>выдается ошибка
V>Msg 303, Level 16, State 1, Line 1 V>The table 'dbo.m_doc_sr' is an inner member of an outer-join clause. This is not allowed if the table also participates in a regular join clause.
V>Как это реализовать?
V>Спасибо
SELECT c_event.d_ev,
c_event.c_event,
C_EVENT.c_cus_se c_custom,
c_event.c_event
m_doc_sr.customer
FROM (select m_doc_sr.c_event, lpu.customer from ic_as.dbo.m_doc_sr, ic_as.dbo.c_custom lpu
where m_doc_sr.c_cus_my = LPU.c_custom) m_doc_sr_1,
dbo.c_event
WHERE m_doc_sr_1.c_event =* c_event.c_event
Re: невозможно привязать к таблице кот. участвует в =* MS SQ
vlaban пишет:
> столкнулся с непонятностью в MS SQL в использовнии этого соединения > таблиц с помьщью =*
Выкинте это Г куда подальше из запроса, его уже скоро парсер тупо
понимать перестанет.
Или у вас старый MSSQL ? Не, не может быть....
> Msg 303, Level 16, State 1, Line 1 > The table 'dbo.m_doc_sr' is an inner member of an outer-join clause. > This is not allowed if the table also participates in a regular join clause. > > Как это реализовать?
Это изза того, что у вас используется derived table (подзапрос во FROM),
в котором обычный JOIN, не внешний. Он раскрывается и получается
фигня.
Перепишите запрос без подзапроса во FROM и через ANSI JOINs,
напишите хотя бы без left join, если не сможете с ним написать.
Я покажу, как сделать left.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: невозможно привязать к таблице кот. участвует в =* MS
Здравствуйте, MasterZiv, Вы писали:
MZ>Выкинте это Г куда подальше из запроса, его уже скоро парсер тупо MZ>понимать перестанет. MZ>Или у вас старый MSSQL ? Не, не может быть....
MZ>Это изза того, что у вас используется derived table (подзапрос во FROM), MZ>в котором обычный JOIN, не внешний. Он раскрывается и получается MZ>фигня.
MZ>Перепишите запрос без подзапроса во FROM и через ANSI JOINs, MZ>напишите хотя бы без left join, если не сможете с ним написать. MZ>Я покажу, как сделать left.
База MS SQL 2000
Собственно я и пытаясь уйти от этой ошибки соорудил внутренний запрос во FROMе
вот без него
SELECT c_event.d_ev,
c_event.c_event,
C_EVENT.c_cus_se,
c_event.c_event,
lpu.customer
FROM dbo.c_event,
ic_as.dbo.m_doc_sr,
ic_as.dbo.c_custom lpu
WHERE m_doc_sr.c_event =* c_event.c_event
AND m_doc_sr.c_cus_my = LPU.c_custom
Говорю, спасибо, бо получилось, собственно вот запрос: (два раза выводится c_event с двух таблиц, потому что есть такие c_event.c_event кот.нет в таблице m_doc_sr)
собственно вот оно, решение:
SELECT c_event.d_ev,
c_event.c_event,
m_doc_sr.c_event,
C_EVENT.c_cus_se,
c_event.c_event,
lpu.customer
FROM dbo.c_event LEFT OUTER JOIN ic_as.dbo.m_doc_sr ON m_doc_sr.c_event = c_event.c_event
LEFT JOIN ic_as.dbo.c_custom lpu ON m_doc_sr.c_cus_my = LPU.c_custom