Объединение 3 таблиц в один набор результатов - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь объединить только выбранные столбцы из 3 разных таблиц, но не удалось.

Таблица 1, Patient, содержит следующие нужные мне столбцы:

ExternalID, UserDefinedXML, ServiceSiteUid

Таблица 2, PDI, содержит следующие необходимые столбцы:

Patient ID, FirstName, LastName, State

Таблица 3, ListServiceSite содержит следующие нужные мне столбцы:

ServiceSiteUid, Name

Мне нужно объединить Patient и PDI на основе общих столбцов идентификаторов ExternalID и PatientID, изатем присоединитесь Patient и ListServiceSite к ServiceSiteUid.

Вот что у меня не получилось:

SELECT 
    *
FROM 
    (SELECT 
         ExternalID, UserDefinedXml, ServiceSiteUid
     FROM 
         Patient) A
INNER JOIN
    (SELECT 
         [Patient ID], FirstName, LastName, State
     FROM 
         PatDemogImport) B ON A.ExternalID = B.[Patient ID]
WHERE
    UserDefinedXml IS NOT NULL;

Я новичок в SQL, поэтому наберитесь терпения!Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 26 января 2019

Разве все не так просто? Вы хотите внутреннее соединение, и вам просто нужно указать нужные столбцы. Это должно дать вам именно тот ответ, который вы ищете. Эти другие ответы имеют ту же идею, но они предполагают, что таблицы содержат только перечисленные столбцы и никаких других столбцов. PatientID должно совпадать с ExternalID, поэтому нет необходимости указывать этот столбец, а C.ServiceSiteUid должно совпадать с Patient.

SELECT A.ExternalID, A.UserDefinedXML, A.ServiceSiteUid, 
       B.FirstName, B.LastName, B.State, 
       C.Name

  FROM Patient A
  INNER JOIN PatDemogImport B ON B.PatientID = A.ExternalID
  INNER JOIN ListServiceSite C ON C.ServiceSiteUid = A.ServiceSiteUid
  WHERE A.UserDefinedXML IS NOT NULL
0 голосов
/ 25 января 2019
SELECT * FROM PATIENT  
JOIN 
    PDI on PATIENT.ExternalID = PDI.ExternalID AND PATIENT.PatientID = PDI.PatientID
JOIN 
    ListServiceSite on ListServiceSite.ServiceSiteUid = PATIENT.ServiceSiteUid
where
    UserDefinedXml IS NOT NULL;

Это должно дать вам то, что вы ищете. В этом случае нет необходимости в подвыборах.

По сути, вы делаете соединение таблиц на основе отношений между столбцами. Таким образом, в приведенном выше примере мы объединяем PDI и PATIENT на основе их двух общих столбцов, а также ListServiceSite и PATIENT на ServiceSiteUid.

Обратите внимание, что когда вы делаете SELECT *, вы получите дублированные столбцы в результате (поскольку вы в основном получаете все столбцы во всех этих таблицах), поэтому я бы рекомендовал указать, что вы выбираете. т.е. SELECT PATIENT.ExternalID, ....

Наконец, я бы порекомендовал почитать о различных видах соединений. Выше приведено только обычное соединение, но есть несколько других, таких как OUTER JOIN INNER JOIN RIGHT JOIN LEFT JOIN, и все они имеют различия.

0 голосов
/ 26 января 2019
SELECT Patient.*
FROM Patient INNER JOIN PatDemogImport as pdi ON
Patient.ExternalID=pdi.Patientid
Inner join ListServiceSite on
Patient.ServiceSiteUid=ListServiceSite.ServiceSiteUid
WHERE Patient.UserDefinedXml IS NOT NULL
0 голосов
/ 25 января 2019

Это должно сделать это

SELECT *
FROM Patient as p
JOIN PatDemogImport as pdi
    ON p.ExternalID = pdi.[Patient ID]
JOIN ListServiceSite as lss
    ON lss.ServiceSiteUid = p.ServiceSiteUid
WHERE p.UserDefinedXml IS NOT NULL;
...