2014-11-27 2 views
0

У меня довольно сложный (ну для меня) запрос sql, и у меня возникают проблемы с некоторыми понятиями.Объединение нескольких таблиц в одну таблицу в sql

У меня есть следующий SQL на веб-странице, что я имею в здание

SELECT 
    [dbo].[Enrolment].[_identity], [dbo].[Enrolment].CommencementDate, 
    [dbo].[Enrolment].CompletionDate, [dbo].[Enrolment].enrolmentDate, 
    [dbo].[Course].name coursename, [dbo].[Course].Identifier as QUALcode, 
    [dbo].[Person].givenName, [dbo].[Person].Surname,[dbo].[Employer].name as empname, 
    [dbo].[Employer].Address1,[dbo].[Employer].Suburb,[dbo].[Employer].Phone, 
    [dbo].[Employer].PostCode,[dbo].[EnrolmentStatus].name as enrolname, 
    [dbo].[Student].identifier,[dbo].[Student].person,[dbo].[Contact].person as CONTACTid 
FROM 
    (((([dbo].[Enrolment] 
LEFT JOIN 
    [dbo].[Course] ON [dbo].[Enrolment].course = [dbo].[Course].[_identity]) 
LEFT JOIN 
    [dbo].[Employer] ON [dbo].[Enrolment].employer = [dbo].[Employer].[_identity]) 
LEFT JOIN 
    [dbo].[EnrolmentStatus] ON [dbo].[Enrolment].status = [dbo].[EnrolmentStatus].[_identity]) 
LEFT JOIN 
    [dbo].[Student] ON [dbo].[Enrolment].student = [dbo].[Student].[_identity]) 
LEFT JOIN 
    [dbo].[Person] ON [dbo].[Student].person = [dbo].[Person].[_identity] 
LEFT JOIN 
    [dbo].[Contact] ON [dbo].[Employer].[_identity] = [dbo].[Contact].employer 
WHERE 
    (([dbo].[EnrolmentStatus].name) = 'training' 
    OR 
    ([dbo].[EnrolmentStatus].name) = 'enrolled') 

Это работает хорошо, но то, что я хотел бы сделать это снова присоединиться к [dbo].[Person] таблице, но на этот раз соединяющую из другой таблицы, поэтому код, который я фактически нужно пропатчить в вышеуказанное утверждение

LEFT JOIN 
    [dbo].[Trainer] ON [dbo].[Enrolment].Trainer = [dbo].[Trainer].[_identity]) 

LEFT JOIN 
    [dbo].[Person] ON [dbo].[Trainer].person = [dbo].[Person].[_identity] 

то мне нужно, чтобы быть в состоянии получить из таблицы человека имя студента и имя тренера, так что мне нужно 2 записи от лица таблица для каждой записи от Enrolment таблица, поля, которые мне нужны из таблицы персонажей, одинаковы для тренера и ученика, потому что я пытаюсь получить given name и surname для обоих.

Любые помощь или указатели были бы наиболее ценными.

+1

дать ему псевдоним –

+1

не удалось получить ваш вопрос точно, вы можете объяснить более ,,, может по каким-то данным –

+0

Отбросьте все ненужные круглые скобки в своих операциях 'FROM' и' JOIN', что усложняет чтение, чем нужно! –

ответ

0

Использование псевдонимов, как это ..

LEFT JOIN [dbo].[Trainer] ON [dbo].[Enrolment].Trainer = [dbo].[Trainer].[_identity]) 
LEFT JOIN [dbo].[Person] AS p ON [dbo].[Trainer].person = p.[_identity] 
+0

Отлично, спасибо –

1

Вы должны просто использовать вместо этого предложение. Вы должны просто первым использовать таблицу Trainer Join, затем Person таблицу, а затем использовать и ключевое слово, чтобы использовать множественное отображение с одной таблицей

FROM (((([dbo].[Enrolment] 
LEFT JOIN [dbo].[Course] ON [dbo].[Enrolment].course = [dbo].[Course].[_identity]) 
LEFT JOIN [dbo].[Employer] ON [dbo].[Enrolment].employer = [dbo].[Employer].[_identity]) 
LEFT JOIN [dbo].[EnrolmentStatus] ON [dbo].[Enrolment].status = [dbo].[EnrolmentStatus].[_identity]) 
LEFT JOIN [dbo].[Student] ON [dbo].[Enrolment].student = [dbo].[Student].[_identity]) 
LEFT JOIN [dbo].[Trainer] ON [dbo].[Enrolment].Trainer = [dbo].[Trainer].[_identity]) 
LEFT JOIN [dbo].[Person] ON [dbo].[Student].person = [dbo].[Person].[_identity] 
          AND [dbo].[Trainer].person = [dbo].[Person].[_identity] 
LEFT JOIN [dbo].[Contact] ON [dbo].[Employer].[_identity] = [dbo].[Contact].employer 
+0

Удивительно, спасибо вам большое, я дам вам попробовать позже, и дайте вам знать, как это происходит. –

0

Если я получаю ваш вопрос прав - то, что вы пытаетесь сделать, - это дважды присоединиться к той же таблице в вашем SQL. У вас есть одна таблица Person, в которой есть как информация о студентах, так и тренерах, и вы хотите видеть их детали бок о бок в своем результирующем наборе. Таким образом, вы должны присоединиться Person один раз Student, а другой раз с Trainer

Чтобы сделать это - вам придется присоединиться Person таблицы вместе. Дайте вашим таблицам псевдоним, как и другие ответы. Тогда ваша статья FROM может выглядеть следующим образом -

FROM (((([dbo].[Enrolment] 

LEFT JOIN [dbo].[Course] ON [dbo].[Enrolment].course = [dbo].[Course].[_identity]) 

LEFT JOIN [dbo].[Employer] ON [dbo].[Enrolment].employer = [dbo].[Employer].[_identity]) 

LEFT JOIN [dbo].[EnrolmentStatus] ON [dbo].[Enrolment].status = [dbo].[EnrolmentStatus].[_identity]) 

LEFT JOIN [dbo].[Student] ON [dbo].[Enrolment].student = [dbo].[Student].[_identity]) 

LEFT JOIN [dbo].[Person] P1 ON [dbo].[Student].person = P1.[_identity] 

LEFT JOIN [dbo].[Contact] ON [dbo].[Employer].[_identity] = [dbo].[Contact].employer 

LEFT JOIN [dbo].[Trainer] ON [dbo].[Enrolment].Trainer = [dbo].[Trainer].[_identity]) 

LEFT JOIN [dbo].[Person] P2 ON [dbo].[Trainer].person = P2.[_identity] 
.... 
.... 

Здесь P1 и P2 два синонима [Человек]

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