显示来自两个表的图表的组合结果

时间:2013-04-02 16:27:43

标签: mysql sql

我有两张桌子:

票数

ID |  YEARMONTH | VOTES
========================
1  | 201101     | 23
1  | 201102     | 12
1  | 201103     | 12
2  | 201101     | 15
3  | 201102     | 1
4  | 201102     | 17

讲座

ID |  YEARMONTH | LECTURES
========================
1  | 201101     | 1
2  | 201101     | 2
3  | 201102     | 5

假设某个ID在给定的yearmonth(讲座或投票)中每个表都没有行,我需要列出结果,以便我可以在图表中显示它们。

如果一个月内另一张桌子上缺少结果,我需要显示零。

因此结果应如下所示:

ID |  YEARMONTH | VOTES | LECTURES
==================================
1  | 201101     | 23    | 1
1  | 201102     | 12    | 0
1  | 201103     | 12    | 0

但是,当然,如果没有丢失LECTURES的VOTES,我需要在那里显示0。

2 个答案:

答案 0 :(得分:1)

您通常会使用FULL OUTER JOIN,但MySQL不支持它们。

您可以使用UNION模拟它,但是,this question显示的接受答案。

答案 1 :(得分:1)

一个选项是创建一个包含所有可能的ID / YearMonth组合的子查询,然后在其他表上创建LEFT JOIN。如果相应的记录为空,则使用COALESCE返回0:

SELECT t.ID, t.YearMonth, COALESCE(V.Votes,0) Votes, COALESCE(L.Lectures,0) Lectures
FROM (
    SELECT DISTINCT ID, YearMonth
    FROM Votes
    UNION 
    SELECT DISTINCT ID, YearMonth
    FROM Lectures 
    ) t
    LEFT JOIN Votes v on t.ID = v.ID AND t.YearMonth = v.YearMonth
    LEFT JOIN Lectures l on t.ID = l.ID AND t.YearMonth = l.YearMonth

SQL Fiddle Demo