将3个表加入一个结果集

时间:2019-01-25 19:50:12

标签: sql-server join inner-join

我试图仅联接3个不同表中的选择列,但没有成功。

表1 Patient具有我需要的以下列:

ExternalID, UserDefinedXML, ServiceSiteUid

表2 PDI具有我需要的以下列:

Patient ID, FirstName, LastName, State

表3 ListServiceSite有我需要的以下列:

ServiceSiteUid, Name

我需要根据公用ID列PatientPDI加入ExternalIDPatientID,然后加入PatientListServiceSiteServiceSiteUid

这是我失败的结果:

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 :(得分:0)

这应该做

 mtcars %>% 
      mutate(ID=row.names(.)) %>% 
      select(ID) %>% 
      filter(!ID%in%c("Volvo 142E","Toyota Corona"))#eg Variable%in%c("x1", "x2", "x3)

答案 1 :(得分:0)

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的两个共享列以及ServiceSiteUid上的ListServiceSite和PATIENT将它们加入了。

请注意,当执行SELECT *时,结果中将得到重复的列(因为基本上是所有这些表中的所有列),所以我建议您指定选择的内容。即SELECT PATIENT.ExternalID, ....

最后,我建议您阅读不同类型的联接。以上只是常规联接,但还有其他类似OUTER JOIN INNER JOIN RIGHT JOIN LEFT JOIN的联接,它们都有差异。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

就这么简单吗?您需要一个内部联接,只需要指定所需的列即可。这应该给您确切的答案。这些其他答案具有相同的想法,但是它们假定表仅包含列出的列,而没有其他列。 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