2014-02-18 89 views
1

我有两张表,能够正确加入。我试图引入第三个表格,即使在特定年份没有数据,我仍然希望为null或0值。我的问题是,当我加入该表时,我得到重复记录或根本没有记录显示。将三个表连接在一起

这里是我试过:

SELECT * 
FROM [4th grade math achievement levels] m 
    INNER JOIN [4th grade reading achievement levels] r 
    ON m.Location = r.Location 
     AND m.TimeFrame = r.TimeFrame 
     AND m.[Achievement Level] = r.[Achievement Level] 
    RIGHT OUTER JOIN [4th graders who scored below proficient reading level by geographic location] g 
    ON m.Location = g.Location 
     AND m.TimeFrame = g.TimeFrame 
WHERE m.Location = 'ohio' 
    AND m.TimeFrame = 2011 

enter image description here

期望的结果 位置|成就水平|数据|地理位置|数据|时间表 这里就是我试图结合 enter image description here

+0

用户LEFT OUTER JOIN来比较你的价值,你会得到一个结果,然后你可以决定你坚持你没有能提供足够的信息。这里 –

+0

同意了,右外连接是你的问题。 – mikey

+0

通常建议您的标识符中没有空格(表格/列名等)。您应该也许不需要每个年级的单独表格 - 这取决于这些表格中的列,但列出的列中没有一个出现在四年级的特定列表中。 –

回答

2

我敢肯定,你想要一个left outer join而不是right outer join

SELECT * 
FROM [4th grade math achievement levels] m INNER JOIN 
    [4th grade reading achievement levels] r 
    ON m.location = r.location AND 
     m.timeframe = r.timeframe AND 
     m.[achievement level] = r.[achievement level] LEFT OUTER JOIN 
     [4th graders who scored below proficient reading level by geographic location] g 
     ON m.location = g.location AND 
      m.timeframe = g.timeframe 
WHERE m.location = 'ohio' AND 
     m.timeframe = 2011; 

一个left outer join将保留所有的结果从mr表匹配条件,生成NULLg中的值不匹配。在查询的形式中,所有行均来自g表(right outer join)。但是,由于m表中的不匹配行将具有NULL值,因此这些值将被滤除。结果是right outer join确实表现得像inner join

0

您需要将where子句移动到您的连接中作为连接条件。当你在where子句中陈述它,你强制查询砸空值

select * 
from [4th grade math achievement levels] m 
inner join [4th grade reading achievement levels] r 
on m.Location = r.Location 
    and m.TimeFrame = r.TimeFrame 
    and m.[Achievement Level] = r.[Achievement Level] 
    and m.Location = 'ohio' -- old where clause 
    and m.TimeFrame = 2011 
right outer join [4th graders who scored below proficient reading level by geographic location] g 
    on m.Location = g.Location 
    and m.TimeFrame = g.TimeFrame 
+0

这加入了所有表格,但在前两个表格中创建了重复项目。 –

+0

然后第三个表中的每一行都有一个链接返回到前两个表中的一个表中的两行。关于您的数据如何关联,还有一些尚未向我们阐明。第三张桌子是以人为本的,对吗?所以你的右外连接是故意的,对吗?表3中的每个学生是否有可能在数学上相应的排和在阅读中有相应的排? – wruckie

+0

除非每个时间范围和地点只有一名学生,否则在必要时会重复使用表格。你可以发布一个输出样本吗? – wruckie