0

我正在尝试加入三个表,并且我正在获取跨行数据(获取 6 行而不是 3 行)。我尝试了内,左和右加入相同的结果。请你帮助我好吗。

表格1

SELECT PATIENT,TDACTDATE,TDACTTIME,TDVALUE 
FROM NurDocumentedResults A 
WHERE (INTBASE = '400130') 
    AND (TDQUERY = 'NURPTVALUE') 
    AND (TDACTDATE = '20120425') 
AND TDVALUE >='8.0' AND A.PATIENT='F126' 

结果我得到

F126    20120425    1715    8.8
F126    20120425    1840    8.4
F126    20120425    2300    9.7

表 2

SELECT B.PATIENT,A.TESTRESULTDATE,A.TESTRESULTTIME,A.RESULT 
FROM LabLSpecResultTests A
INNER JOIN LabLSpecimenFile B 
    ON A.URN=B.URN 
    AND A.TESTRESULTDATE=B.COLLECTIONDATE 
WHERE A.TESTRESULTDATE='20120425' 
    AND (A.TEST IN ('100.0100', '100.0120', '100.0130', '100.0110')) 
    AND (A.RESULT > '8.0') 
    AND B.PATIENT='F126'

结果我得到

F126    20120425    1756    8.5
F126    20120425    2335    9.2

当我加入所有三个表时,

SELECT D.PATIENT,TDACTDATE,TDACTTIME,TDVALUE,A.RESULT,A.RESULTTIME,A.TESTRESULTDATE,A.TESTRESULTTIME
FROM NurDocumentedResults D 
LEFT OUTER JOIN LabLSpecimenFile B 
    ON D.PATIENT=B.PATIENT AND D.TDACTDATE=B.COLLECTIONDATE
INNER JOIN LabLSpecResultTests A 
    ON A.URN=B.URN 
    AND A.TESTRESULTDATE=B.COLLECTIONDATE
WHERE (INTBASE = '400130') 
    AND (TDQUERY = 'NURPTVALUE') 
    AND (TDACTDATE = '20120425') 
    AND TDVALUE >='8.0' 
    AND A.TESTRESULTDATE='20120425' 
    AND  (A.TEST IN ('100.0100', '100.0120', '100.0130', '100.0110')) 
    AND (A.RESULT > '8.0') 
    AND D.PATIENT='F126'

我得到以下结果

F126    20120425    1715    8.8 8.5 2463    20120425    1756
F126    20120425    1840    8.4 8.5 2463    20120425    1756
F126    20120425    2300    9.7 8.5 2463    20120425    1756
F126    20120425    1715    8.8 9.2 22789   20120425    2335
F126    20120425    1840    8.4 9.2 22789   20120425    2335
F126    20120425    2300    9.7 9.2 22789   20120425    2335
4

1 回答 1

0

建议:您可以从第一个表连接到连接其他两个表的 Select 语句。很抱歉没有写实际的查询我在这台机器上没有 sql 来写查询,因为我在 linux 上

尝试类似 Select TableA.* from TableA LEFT JOIN (SELECT Fields From TableB LEFT JOIN TABLEC ON TableB ... = TableC ) AS JOIN_TABLE ON TableA.Field = JOIN_TABLE.Field

尝试这样的事情,它可能会如你所愿。

于 2012-08-23T23:01:22.977 回答