2014-08-27 1 views
1

Я застрял в этой ошибке, и связанные с этим вопросы, найденные здесь, на SO не помогли мне увидеть свет по этому запросу:идентификатор с несколькими частями не может быть связан - внутреннее соединение 5 таблиц - без подзапросов

SELECT 
EventID = a.EventID 
,PositionID = a.PositionID 
,SubscriberID = a.SubscriberID 
,EventTitle = a.EventTitle 
,Frequency = a.Frequency 
,DueDate = a.DueDate 
,NoticeDate = a.NoticeDate 
,SubscriberName = e.SubscriberName 
,PositionTitle = d.PositionTitle 
,UserID = c.UserID 
,UserName = c.UserName 
,BackupUserID = b.BackupUserID 
FROM 
    dbo.tblEvent   a JOIN 
    dbo.PositionPeople b JOIN 
    dbo.UserInfo   c JOIN 
    dbo.Position   d JOIN 
    dbo.Subscriber  e 
ON 
a.PositionID  = b.PositionID  AND 
a.SubscriberID  = b.SubscriberID AND 
b.IncumbentUserID = c.UserID   AND 
a.SubscriberID  = c.SubscriberID AND 
a.SubscriberID  = e.SubscriberID AND 
a.PositionID  = d.PositionID 

Я не смешиваю неявные и явные JOINs и не использую подзапрос, как это было предложено другими потоками в этом разделе. Я получаю эту ошибку для всех, следующих за предложением ON (кроме e.SubscriberID и d.PositionID). Я пробовал несколько вариантов, и я не вижу проблемы.

ответ

4

Ваша структура запроса кажется несовместимым, попробуйте эту версию того же самого запроса:

SELECT A.EventID 
    ,A.PositionID 
    ,A.SubscriberID 
    ,A.EventTitle 
    ,A.Frequency 
    ,A.DueDate 
    ,A.NoticeDate 
    ,E.SubscriberName 
    ,D.PositionTitle 
    ,C.UserID 
    ,C.UserName 
    ,B.BackupUserID 
FROM dbo.tblEvent A 
INNER JOIN dbo.PositionPeople B ON B.PositionID = A.PositionID 
            AND B.SubscriberID = A.SubscriberID 
INNER JOIN dbo.UserInfo C ON C.SubscriberID = A.SubscriberID 
          AND C.UserID = B.IncumbentUserID 
INNER JOIN dbo.Position D ON D.PositionID = A.PositionID 
INNER JOIN dbo.Subscriber E ON E.SubscriberID = A.SubscriberID 

И если вы хотите установить некоторые переменные, используя этот запрос, просто добавьте переменную экземпляра в SELECT, причины, как и в в следующем примере:

SELECT @EventID = A.EventID 
    ,@PositionID = A.PositionID 
    ... 
FROM ... 

Надеюсь, это поможет.

+0

Да, действительно. Конечно, это помогло. Я думаю, что я вижу правило, касающееся синтаксиса JOIN, о котором я ранее не знал. Большое спасибо. –

+0

Существует множество решений, когда речь идет о структуре запросов, но это не единственная проблема, но я считаю ее более читаемой, чем определение условий JOIN в предложении WHERE. И, используя эту структуру, вы избегаете многих ошибок в условиях соединения ;-) –

Смежные вопросы