невозможно привязать к таблице кот. участвует в =* MS SQL
От: vlaban  
Дата: 06.02.09 14:31
Оценка:
столкнулся с непонятностью в 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
От: _d_m_  
Дата: 06.02.09 16:05
Оценка:
Здравствуйте, vlaban, Вы писали:

V>столкнулся с непонятностью в MS SQL в использовнии этого соединения таблиц с помьщью =*

V>Кратко: запрос

Версия БД какая? =* — Это слишком древний синтаксис, который давно уже устарел.
Re: невозможно привязать к таблице кот. участвует в =* MS SQ
От: anddros  
Дата: 06.02.09 16:46
Оценка:
Здравствуйте, 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
От: MasterZiv СССР  
Дата: 06.02.09 21:51
Оценка: 3 (1) +1
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
От: vlaban  
Дата: 07.02.09 09:28
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Версия БД какая? =* — Это слишком древний синтаксис, который давно уже устарел.


MS SQL 2000 что поделаешь, пишу отчет под не мою давно уж устаревшую базу, людей устраивает, не мое дело...
Re[2]: невозможно привязать к таблице кот. участвует в =* MS
От: vlaban  
Дата: 07.02.09 09:35
Оценка:
Здравствуйте, anddros, Вы писали:

A>
A>SELECT c_event.d_ev, 
A>c_event.c_event,
A>C_EVENT.c_cus_se c_custom,
A>c_event.c_event
A>m_doc_sr.customer
A>FROM (select m_doc_sr.c_event, lpu.customer from ic_as.dbo.m_doc_sr, ic_as.dbo.c_custom lpu 
A>where m_doc_sr.c_cus_my = LPU.c_custom) m_doc_sr_1,
A>dbo.c_event
A>WHERE m_doc_sr_1.c_event =* c_event.c_event
A>



эт отчасу не легче, в запрос должна выводиться lpu.customer, в єтом вся суть. Да и похож на єтот запрос выводится таже ошибка.
Re[2]: невозможно привязать к таблице кот. участвует в =* MS
От: vlaban  
Дата: 07.02.09 09:49
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.