2015-06-30 58 views
-1

我知道類似於我的問題已在其他地方得到解答,但我似乎無法弄清楚我的情況。SQL從3個表中加入信息

我有2個表,一個[Request]表用於存儲請求和一個[Log]表用於存儲對請求執行的狀態更改。我正在開發一個報告應用程序,該應用程序當前使用兩張表中的RequestID上的INNER JOIN返回有關每個請求的狀態更改的信息。這看起來像這樣:

SELECT 
    [Log].[Column1], [Request].[Column2], [Request].[Column3] 
FROM 
    [Log] 
INNER JOIN 
    [Request] ON [Log].[RequestID] = [Request].[ID] 

這是我的問題:我被要求擴大報告,包括請求的行動。我會解釋。每個請求都有一個與其關聯的類型。如果類型是SMP我需要包含Action來自第三個[SMP_Request]表,並將其包括在我的報告中作爲列。如果該類型不是SMP,則該列僅留空。我相信這一點也很重要,[SMP_Request]表格還有一個RequestID字段,我們可以使用它來匹配所有內容。

我想弄清楚如何制定我的查詢,以包括表的Action列,但我正在努力把它弄好。任何幫助,將不勝感激。謝謝!

+0

你得到一個錯誤?請發佈您的查詢嘗試。 –

回答

3

使用左連接。

SELECT [Log].[Column1], [Request].[Column2], [Request].[Column3] , IsNull([SMP_Request].[Action], '') as Action 
    FROM [Log] 
     INNER JOIN [Request] ON [Log].[RequestID] = [Request].[ID] 
     LEFT JOIN [SMP_Request] ON [SMP_Request].[RequestID] = [Request].[ID] 

這會給你如果有請求和案件的任何行動,不,會返回一個空格

Check here more info

+0

完美。這正是我需要的。謝謝! – TheIronCheek

0

我想這就是你要找的。

SELECT [Log].[Column1], [Request].[Column2], [Request].[Column3], smp.Action 
FROM [Log] 
    INNER JOIN [Request] ON [Log].[RequestID] = [Request].[ID] 
    LEFT OUTER JOIN SMP_Request smp ON (Request.ID = smp.RequestID AND smp.type == 'the type you care about')