SQL 加入来自 3 个表的信息

SQL Joining Information From 3 Tables

我知道其他地方已经回答了与我类似的问题,但我似乎无法为我的场景解决这个问题。

我有 2 个 table,一个 [Request] table 用于存储请求,一个 [Log] table 用于存储在要求。我正在开发一个报告应用程序,目前 returns 关于每个请求的状态更改的信息使用 table 的 RequestID 上的 INNER JOIN。看起来像这样:

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

这是我的问题:我被要求扩展报告以包括请求的操作。我会解释。每个请求都有一个与之关联的类型。如果类型是 SMP,我需要包括来自第三个 [SMP_Request] table 的 Action,并将其作为我报告中的一列。如果类型不是 SMP,则该列留空。我确定同样重要的是要注意 [SMP_Request] table 也有一个 RequestID 字段,我们可以使用它来匹配所有内容。

我正在尝试弄清楚如何设计我的查询以包含 [SMP_Request] table 中的这个 Action 列,但我正在努力做到正确。任何帮助,将不胜感激。谢谢!

我想这就是您要找的。

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')

使用左连接。

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]

如果对请求有任何操作,这会给你,如果没有,将 return 一个空白 Space

Check here more info