2017-08-04 41 views
0

当我试图联接所有4个表(它需要花费一个多小时才能运行,我必须最终终止查询而没有返回任何数据)时,我有以下查询不工作。 它的工作时,表1,2 & 3加入,然后如果我尝试表1,2 & 4加入但不是当我试图加入下面的所有4个表。SQL多联接按预期方式工作

Select * From 
    (Select 
     R.ID, R.MId, R.RId, R.F_Name, R.F_Value, FE.FullEval, M.Name, RC.CC  
     FROM Table1 as R 
     Inner Join Table2 FE 
       ON R.ID = FE.RClId and R.MId = FE.MId and R.RId = FE.RId 
      Inner Join Table3 as M 
       ON R.MId = M.MId and FE.MId = M.MId 
       Inner Join Table4 as RC 
        ON R.RId = RC.RId and FE.RId = RC.RId and FE.Date = RC.Date 

    ) AS a 

说明: 1)RId在表3中不可用。 2)MId在表4中不可用。

感谢您的帮助。

+2

尝试使用'LEFT JOIN'而不是'INNER JOIN' –

+1

你是什么意思'不按预期工作? – LONG

+0

有什么问题?你收到一张空桌子吗?查询是否崩溃? –

回答

1

既然您提到您没有查看查询计划的权限,请尝试分解到每个表连接。您还可以检查哪个表连接需要时间来检索记录。从那里,你可以调查数据为什么需要时间。这可能是因为表3和表4中的列键不可用?

WITH Tab1_2 AS 
(SELECT r.ID, r.MId, r.RId, r.F_Name, r.F_Value, fe.FullEval, fe.date 
    FROM Table1 as r 
    INNER JOIN Table2 fe 
    ON r.ID = fe.RClId 
    AND r.MId = fe.MId 
    AND r.RId = fe.RId 
    WHERE ... -- place your conditions if any 
), 

Tab12_3 AS 
(SELECT t12.*, m.Name 
    FROM Tab1_2 t12 
    INNER JOIN Table3 as m 
    ON t12.MId = m.MId 
    WHERE ... -- place your conditions if any 
), 

Tab123_4 AS 
(SELECT t123.ID, t123.MId, t123.RId, t123.F_Name, t123.F_Value, t123.FullEval, rc.CC 
    FROM Tab12_3 t123 
    INNER JOIN Table4 as rc 
    ON t123.RId = rc.RId 
    AND t123.Date = rc.Date 
    WHERE ... -- place your conditions if any 
) 

SELECT * 
    FROM Tab123_4 t1234 
+0

你好。感谢您的建议。 不幸的是,在进行更改和运行近1小时后,没有结果,因此我不得不停止查询。 注:我可以加入表1,2和3,我可以在2分钟内看到结果。我也可以参加表格1,2和4,我可以在2分钟内看到结果。 它只是当我尝试加入所有4桌,然后我在亏损! :( – user8419075

+0

我终于运行了近2小时的查询,出现以下错误: 由于文件组'DEFAULT'中的磁盘空间不足,无法为数据库'TEMPDB'分配新页面。 – user8419075