我是一个完整的新手,通过在工作中编写和修改一些查询和报告来自学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进一步排除记录,我实际上想要包含更多记录。
就像我说的那样,我确信这很简单,只需要朝着正确的方向轻推。
谢谢!
答案 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_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_Number
是否在tableb
中,它仍将被退回,因此可以加入tablec