0

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

我坚持的应该是一个简单的任务,但我的 Google-Fu 一定很弱。这就是我想要做的。

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

如果 A.Serial_Number = B.Serial_Number OR 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 进一步排除记录,而我实际上想要包含更多记录。

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

谢谢!

4

2 回答 2

0

同意。您的内部连接输出产生 NULL,这就是它导致 0 的原因。我建议修改您的 INNER JOIN。

于 2013-11-12T01:57:32.330 回答
0

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

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

在第二个子句上使用左外连接 - 我认为您的意思是第二个连接 - 将对已A.Serial_Number = B.Serial_Number被第一个内连接过滤的结果集执行左连接。鉴于这B.Serial_Number与您无关,C.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_Numbertableb它仍然会被返回,因此可以加入到tablec

于 2013-11-12T02:09:20.000 回答