内连接3表不返回任何内容

时间:2015-06-22 18:02:27

标签: sql ms-access-2010 inner-join

有3张桌子。

CB表

      CID   EC ID   Status  CType
      1001  1001    Active  1540
      1004  1001    Active  4

表M

CID     EID        EC ID    EID-CID
1001      1166          1001    1166_1001
1001      1167a         1001    1167a_1001
1001      1167b         1001    1167b_1001
1001      1168          1001    1168_1001
2014.2071 1043          2018    1043_2014.2071
1004      1166          1001    1166_1004
1004      1167a         1001    1167a_1004
1004      1168          1001    1168_1004
1004      1167b         1001    1167b_1004

第三张表(CM)

EID           CID            EID-CID      EC ID          CType
1043    2014.2071     1043_2014.2071      2018            4

我试图加入3个表。我正在使用下面的查询(我参考了stackoverflow页面Inner Joining three tables) 我的查询没有返回。但没有给出任何错误信息。

SELECT 
  M.EID, 
  CB.CID, 
  M.[EID-CID], 
  CB.[CType],
  CB.[EC ID] 
FROM 
  (CB INNER JOIN M ON CB.CID = M.CID) 
  inner join CM on CM.CID=M.CID

结果应该是这样的

 CID        EID       EC ID EID-CID      CType
1001        1166    1001    1166_1001       1540
1001        1167a   1001    1167a_1001      1540
1001        1167b   1001    1167b_1001      1540
1001        1168    1001    1168_1001       1540
2014.2071    1043   2018    1043_2014.2071  5.5
1004        1166    1001    1166_1004        4
1004        1167a   1001    1167a_1004       4
1004        1168    1001    1168_1004        4
1004        1167b   1001    1167b_1004       4

3 个答案:

答案 0 :(得分:0)

使用inner join时,只会返回与加入条件匹配的结果。

  1. CB表有两个ID:1001, 1004
  2. M表具有这两个ID(将在查询的此点返回)
  3. CM表中CB的ID none
  4. 在三个表之间执行inner join会产生零结果 ,因为它应该

    如果您移除了CM上的加入,则您将获得与CB中的两个ID相关的结果,或者如果您要加入{{1> M您将拥有CM行的{}和2014.2071表,但是在所有三个表中都没有记录。由于在所有三个表之间使用inner joins,您将收到应该的结果(基于您所写的内容),这是零记录。

答案 1 :(得分:0)

内连接仅返回匹配时的结果。看起来你有连接类型搞砸了。 根据你对结果的看法,我假设你正在寻找一个左或右联接。 e.g。

SELECT 
M.EID, CB.CID, M.[EID-CID], CB.[CType],CB.[EC ID] 
FROM 
  (CB RIGHT JOIN M ON CB.CID = M.CID) LEFT JOIN CM  on CM.CID=M.CID

您可能想看一下这个网站: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

答案 2 :(得分:0)

您加入CM加入了错误的列:您正在开玩笑,但您应该加入EID:

SELECT M.EID, CB.CID, M.[EID-CID], CB.[CType],CB.[EC ID]
FROM CB
JOIN M ON CB.CID = M.CID
JOIN CM ON CM.EID = M.EID -- change here

删除了不必要的括号。