2013-03-18 5 views
1

Я хочу присоединиться к той же таблице, чтобы получить некоторую информацию.JOINING Та же таблица дает повторяющуюся информацию

У меня есть таблица Person

PersonId, FirstName, LastName, Address 

Также стол пациента

PatientId, PersonId, ResponsiblePersonId

Ниже запрос я попытался получить ПгвЬЫате пациента , Фамилия и имя ответственного лица FirstName, Фамилия. Для этого я ПРИСОЕДИНЯЛ таблицу персонажа еще раз, чтобы получить Ответственные Персоны, Фамилии.

Но у меня много дубликатов записей.

SELECT PAT.PatientId 

     ,PER.PersonNumber 
     ,PER.FirstName 
     ,PER.LastName 
     ,RES_PER.FirstName AS ResFirstName 
     ,RES_PER.LastName AS ResLastName 
     ,PER.Address     

FROM  dbo.Patient AS PAT 
INNER JOIN dbo.Person AS PER 
    ON PAT.PersonId = PER.PersonId 
INNER JOIN dbo.Person AS RES_PER 
    ON PAT.ResponsiblePersonId = PER.PersonId 

Как я могу получить пациента FirstName, LastName & ответственного лица Имя, Фамилия для записи пациента?

ответ

1

В принципе, вам нужно объединить таблицу Person дважды на столе Patient, чтобы получить на ней два зависимых столбца.

SELECT b.FirstName Patient_FirstName, 
     b.LastName Patient_LastName, 
     b.Address Patient_Address, 
     c.FirstName Responsible_Firstname, 
     c.LastName Responsible_LastName, 
     c.Address Responsible_Address 
FROM Patient a 
     INNER JOIN Person b 
      ON a.PersonID = b.PersonID 
     INNER JOIN Person c 
      ON a.ResponsiblePersonId = c.PersonID 

Для дальнейшего получить больше знаний о присоединяется, любезно перейдите по ссылке ниже:

+1

Спасибо. Оно работает. Ваша ссылка помогает мне разобраться в JOINS. – Billa

+0

приветствую вас: D' рад, что это помогло. –

+0

Я уже пробовал это. Но SOF говорит: «Вы можете принять ответ за 8 минут». Теперь 4 минуты. Принять и убедиться, что этот вопрос получил ответ :) – Billa

1

Все, что вам нужно сделать, это заменить PER с RES_PER в самый последний бит ваш SQL. (то есть PER.PersonId становится RES_PER.PersonId).

SELECT PAT.PatientId 
     ,PER.PersonNumber 
     ,PER.FirstName 
     ,PER.LastName 
     ,RES_PER.FirstName AS ResFirstName 
     ,RES_PER.LastName AS ResLastName 
     ,PER.Address     

FROM  dbo.Patient AS PAT 
INNER JOIN dbo.Person AS PER 
    ON PAT.PersonId = PER.PersonId 
INNER JOIN dbo.Person AS RES_PER 
    ON PAT.ResponsiblePersonId = RES_PER.PersonId 
Смежные вопросы