【问题标题】:SQL Joining Information From 3 Tables来自 3 个表的 SQL 连接信息
【发布时间】:2024-05-21 03:55:01
【问题描述】:

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

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

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

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

我正试图弄清楚如何制作我的查询以包含 [SMP_Request] 表中的这个 Action 列,但我正在努力让它正确。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 您遇到错误了吗?请发布您的查询尝试。

标签: sql sql-server join inner-join


【解决方案1】:

使用左连接。

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

【讨论】:

  • 完美。这正是我所需要的。谢谢!
【解决方案2】:

我想这就是你要找的。​​p>

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

【讨论】: