我有两张桌子:
票数
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。
答案 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