SQL连接3个表中的信息

时间:2015-06-30 14:28:11

标签: sql sql-server join inner-join

我知道类似于我的问题已在其他地方得到解答,但我似乎无法解决这个问题。

我有2个表,一个[Request]表用于存储请求,一个[Log]表用于存储对请求执行的状态更改。我正在处理一个报告应用,该应用当前使用两个表中INNER JOIN的{​​{1}}返回有关每个请求的状态更改的信息。看起来像这样:

RequestID

以下是我的问题:我已被要求扩展报告以包含请求的操作。我会解释一下。每个请求都有一个与之关联的类型。如果类型为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列,但我正在努力使其正确。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 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

答案 1 :(得分: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')