我想使用
为航空公司制作报告我的日期表包含一系列日期
Entryid | Date
----------------
1 |2016-06-01
2 |2016-06-02
4 |2016-06-03
5 |2016-06-04
6 |2016-06-05
7 |2016-06-06
我的航空公司表包括
id|name
---------
1 |Air1
2 |Air2
3 |Air3
和路线表:
id|date |airline|routename
1|2016-06-01|1 |city1-city2
2|2016-06-01|1 |city1-city3
3|2016-06-01|2 |city1-city3
4|2016-06-02|2 |city1-city3
5|2016-06-02|2 |city1-city3
6|2016-06-04|2 |city1-city3
7|2016-06-04|2 |city1-city3
8|2016-06-04|1 |city1-city3
通过使用这三个表我想产生如下结果“
Date |Airline|totleroute
2016-06-01 | Air1 | 2
2016-06-01 | Air2 | 1
2016-06-02 | Air1 | 0
2016-06-02 | Air2 | 2
2016-06-03 | Air1 | 0
2016-06-03 | Air2 | 0
2016-06-04 | Air1 | 1
2016-06-04 | Air2 | 2
如何通过加入三个表来产生所需的结果?
答案 0 :(得分:1)
您可以使用如下查询:
SELECT d.`date`, t.`name`, COUNT(r.`routename`) AS TotalRoutes
FROM `Date` AS d
CROSS JOIN (
SELECT DISTINCT r.`airline`, a.`name`
FROM Route AS r
INNER JOIN Airline AS a ON r.airline = a.id
) AS t
LEFT JOIN Route AS r ON d.`date` = r.`date` AND t.`airline` = r.`airline`
GROUP BY d.`date`, t.`airline`
使用CROSS JOIN
来生成每个date
- airline
组合的结果,如OP中的示例输出所示。
答案 1 :(得分:0)
请尝试此查询:
select e.date,a.name airline, count(r.id) total_route from route_tbl r
LEFT join entry_tbl e on r.date =e.date
LEFT join airline_tbl a on a.id= r.id
order by r.date
group by r.date
答案 2 :(得分:0)
您似乎需要一个所谓的FULL JOIN
来包含日期和路线条目的所有组合,其中一列包含每天的航线数量和航空公司。
遗憾的是,MySQL缺乏对FULL JOIN
的支持,有一个feature request open since some years。
仍然可以模仿这样的功能。好的阅读将是https://explainextended.com/2009/04/06/emulating-full-outer-join-in-mysql/