2016-08-06 54 views
0

我需要下面查询中T3表格的所有记录。 如何使用左连接语句解决我在oracle中的问题。如何在多个表格中使用左连接

SELECT COUNT(*) 

    FROM R 
    LEFT JOIN RD 
    ON (R.ID = RD.RES_INFO_ID) 
    LEFT JOIN RES 
    ON (R.SEL_EVL_RES_ID = RES.ID) 
    LEFT JOIN S 
    ON (S.ID = R.SEL_EVL_ID) 
    LEFT JOIN D 
    ON (RD.DEC_DET_ID = D.ID) 
    LEFT JOIN M 
    ON (S.EVL_MAS_ID = M.ID) 
    LEFT JOIN P_RES 
    ON (P_RES.PRS_ID = RES.PRS_ID) 
    LEFT JOIN P_MAS 
    ON (P_MAS.PRS_ID = M.PRS_ID) 
    LEFT JOIN P_EVL 
    ON (P_EVL.PRS_ID = S.PRS_ID) 
    LEFT JOIN P 
    ON (P.EVL_MAS_ID = M.ID) 
    LEFT JOIN DM 
    ON (DM.EVL_RES_INF_DET_ID = RD.ID); 

在此先感谢

+0

你想达到什么目的?你为什么认为左连接是要走的路? –

+0

通过使用此查询,我可以实现他们评估并获得分数的大部分人员。这些分数分配在T4表中。并且没有得分或评价他们的人(原始人)在T3表中存储。现在我想要除了prev查询之外,新的需求也将被考虑(大部分没有得分的人)。因为这个,我认为左连接是有效的。但我不知道。也许联盟声明是更好的soution! –

回答

0

如果需要从T3的所有记录,那么这应该是FROM子句中的第一个表。所有连接应该是LEFT JOIN s。我想你打算:

SELECT COUNT(*) 
FROM T3 R LEFT JOIN 
    T1 S 
    ON S.ID = R.SELF_EVALUATION_ID LEFT JOIN 
    T2 RD 
    ON RD.EVL_RESOURCE_INFO_ID = R.ID LEFT JOIN 
    T4 RES 
    ON R.SELF_EVALUATION_RESOURCE_IDRES.ID LEFT JOIN 
    T5 M 
    ON S.EVALUATION_MASTER_ID = M.ID LEFT JOIN 
    T6 D 
    ON RD.DECENCY_DETAIL_ID = D.ID LEFT JOIN 
    T7 P 
    ON P.EVALUATION_MASTER_ID = M.ID LEFT JOIN 
    T8 DM 
    ON DM.EVL_RES_INFO_DETAIL_ID = RD.ID; 

在未来,遵循一个简单的规则:在FROM子句中决不使用逗号。 总是使用明确的JOIN语法与ON子句中的连接条件。