2017-08-04 39 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