有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
答案 0 :(得分:0)
使用inner join
时,只会返回与加入条件匹配的结果。
CB
表有两个ID:1001, 1004
M
表具有这两个ID(将在查询的此点返回)CM
表中CB
的ID none 。在三个表之间执行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
删除了不必要的括号。