Showing combined results for graph from two tables
本问题已经有最佳答案,请猛点这里访问。
我有两张桌子:
选票
1 2 3 4 5 6 7 8 | ID | YEARMONTH | VOTES ======================== 1 | 201101 | 23 1 | 201102 | 12 1 | 201103 | 12 2 | 201101 | 15 3 | 201102 | 1 4 | 201102 | 17 |
讲座
1 2 3 4 5 | ID | YEARMONTH | LECTURES ======================== 1 | 201101 | 1 2 | 201101 | 2 3 | 201102 | 5 |
号
假设一个ID在一个给定的年份月份中没有每个表的行(讲座或投票),我需要列出结果,以便在图表中显示它们。
如果一年一个月的结果在另一张表上丢失,我需要显示零。
结果应该是这样的:
1 2 3 4 5 | ID | YEARMONTH | VOTES | LECTURES ================================== 1 | 201101 | 23 | 1 1 | 201102 | 12 | 0 1 | 201103 | 12 | 0 |
但是,当然,如果没有投票,而讲座没有缺席,我需要在那里显示0。
一个选项是使用所有可能的id/yearmonth组合创建子查询,然后在其他表上创建
1 2 3 4 5 6 7 8 9 10 | 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小提琴演示
您通常会使用一个完整的外部连接,但MySQL不支持它们。
但是,您可以用一个联合来模拟它,正如这个问题的公认答案所示。