SQL尝试执行JOIN以包含多个表的结果

时间:2013-11-12 01:38:37

标签: sql join

我是一个完整的新手,通过在工作中编写和修改一些查询和报告来自学SQL。 我已经掌握了各种类型的JOIN,我已经使用了INNER JOIN几次并取得了不错的成功。

我所坚持的应该是一项简单的任务,但我的谷歌必须是弱者。这就是我想要做的。

假设我有3个表,Table_A,Table_B和Table_C,每个表都有一个名为[Serial_Number]的列。

如果A.Serial_Number = B.Serial_Number或C.Serial_Number,我想要选择的是其他3列。

我尝试过:

SELECT 
   * 
FROM 
  Table_A AS A 
  INNER JOIN Table_B AS B ON A.Serial_Number = B.Serial_Number
  INNER JOIN Table_C AS C ON A.Serial_Number = C.Serial_Number

但是这总是产生0结果,因为数据的性质决定了如果A匹配B,它将永远不会匹配C,反之亦然。我还尝试了LEFT OUTER JOIN作为第二个子句,但这只包括Table_C中已经在Table_B上匹配的NULL。

我在多个表上执行的与JOIN相关的所有搜索似乎都是关于使用JOINS进一步排除记录,我实际上想要包含更多记录。

就像我说的那样,我确信这很简单,只需要朝着正确的方向轻推。

谢谢!

2 个答案:

答案 0 :(得分:0)

同意。你的内部联接的输出产生NULL,这就是为什么它导致0.我建议修改你的INNER JOIN。

答案 1 :(得分:0)

这里使用两个内连接类似于说

If A.Serial_Number = B.Serial_Number AND    
   A.Serial_Number = C.Serial_Number

在第二个子句上使用左外连接 - 我假设你意味着第二个连接 - 将对第一个内部连接已经由A.Serial_Number = B.Serial_Number过滤的结果集执行左连接。鉴于B.Serial_NumberC.Serial_Number无关,您不会指望等值连接从tablec返回任何结果。

你想要的是left outer join,就像你尝试过的那样,但对于tableb和tablec都是如此。

Select *
From tablea
Left join tableb on tableb.Serial_Number = tablea.Serial_Number
Left join tablec on tablec.Serial_Number = tablea.Serial_Number

这种方式无论tablea.Serial_Number是否在tableb中,它仍将被退回,因此可以加入tablec