簡體   English   中英

如何將內部聯接添加到具有多個聯接的查詢中?

[英]How to add inner join to query with multiple joins?

我試圖將內部聯接添加到由其他人完成的查詢中,但是卻不斷出錯。 我試圖找出添加它的正確方法,要添加的內部聯接是:

select 
    pa.AdmissionID, pad.AdmissionID, pad.AdmTypeID
from 
    v_dbPatientAdmissions pa
inner join 
    V_DbPatientAdmissionAddition pad on pad.AdmissionID = pa.AdmissionID
where 
    pad.AdmTypeID in (3, 37, 42, 43, 44, 51)

我要向其添加內部聯接的查詢是:

SELECT 
    PA.RegCode UHID, PA.Specialisation, A.CREATEDATE ADM_ORDER, 
    PA.CREATEDATE ADM_DATE,  
    (CAST((DATEDIFF(minute, A.CREATEDATE, PA.CREATEDATE))/60 AS VARCHAR)+' H:'                                 
        + CAST((DATEDIFF(minute,A.CREATEDATE, PA.CREATEDATE))%60 AS VARCHAR)+' M') AS DURATION
FROM 
    (SELECT 
         M.IPID, M.PatientID, A.CREATEDATE 
     FROM 
         v_dbPatientAdvice A
     INNER JOIN 
         v_dbPatientMonitoring M ON M.MonitorID = A.MonitorID
     WHERE 
         A.FollowUpType = 2) A 
INNER JOIN  
    (SELECT 
         PA.PatientID, PA.CREATEDATE, PA.RegCode, S.Specialisation, PA.PatientType
     FROM 
         v_dbPatientAdmissions PA
     INNER JOIN 
         v_dbSpecializations S ON S.SpecialiseID = PA.SpecialiseID) PA ON A.PatientID = PA.PatientID
                                                                       AND PA.PatientType = 2
                                                                       AND PA.CREATEDATE > A.CREATEDATE
                                                                       AND PA.CREATEDATE < DATEADD(DAY, 1, A.CREATEDATE)
WHERE 
    A.CREATEDATE > '2017-01-01'
    AND A.CREATEDATE < DATEADD(DAY, 1, '2018-09-20')

要添加的內部V_DbPatientAdmissionAddition具有一個新表V_DbPatientAdmissionAddition ,另一表已在查詢v_dbPatientAdmissions

我嘗試將其添加為子查詢,也嘗試不使用From v_dbPatientAdmissions添加它,但語法仍然存在問題。

如果有人可以幫助我將內部聯接添加到查詢中,那將很有幫助! 我希望我能夠清楚地解釋這個問題。

您可以使用CTE簡化這項工作:

with cte as (
      select pa.AdmissionID, pad.AdmissionID,pad.AdmTypeID
      from v_dbPatientAdmissions pa inner join
           V_DbPatientAdmissionAddition pad on pad.AdmissionID=pa.AdmissionID
      where pad.AdmTypeID in (3, 37, 42, 43, 44, 51)
    )
select . . .
from . . . join
     newtable nt
     on ?.? = nt.?  -- whatever the `join` conditions are
. . .

您可以擴展第二個子查詢。 您還需要用要返回的新列擴展主SELECT。

SELECT PA.RegCode UHID, PA.Specialisation, A.CREATEDATE ADM_ORDER, PA.CREATEDATE ADM_DATE,  
(CAST((DATEDIFF(minute, A.CREATEDATE, PA.CREATEDATE))/60 AS VARCHAR)+' H:'                                 
+ CAST((DATEDIFF(minute,A.CREATEDATE, PA.CREATEDATE))%60 AS VARCHAR)+' M') AS DURATION
FROM (SELECT M.IPID, M.PatientID, A.CREATEDATE 
      FROM v_dbPatientAdvice A
      INNER JOIN v_dbPatientMonitoring M ON M.MonitorID = A.MonitorID
      WHERE A.FollowUpType = 2
) A 
INNER JOIN (SELECT PA.PatientID, PA.CREATEDATE, PA.RegCode, S.Specialisation, PA.PatientType,
                   PA.AdmissionID, pad.AdmissionID, pad.AdmTypeID -- New SELECT columns
            FROM v_dbPatientAdmissions PA
            INNER JOIN v_dbSpecializations S ON S.SpecialiseID = PA.SpecialiseID
            INNER JOIN V_DbPatientAdmissionAddition pad on pad.AdmissionID=pa.AdmissionID -- New JOIN
            WHERE pad.AdmTypeID in (3,37,42,43,44,51) -- new WHERE
) PA ON A.PatientID = PA.PatientID
    AND PA.PatientType = 2
    AND PA.CREATEDATE > A.CREATEDATE
    AND PA.CREATEDATE < DATEADD(DAY, 1, A.CREATEDATE)
WHERE A.CREATEDATE > '2017-01-01'
AND   A.CREATEDATE < DATEADD(DAY, 1, '2018-09-20')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM