[英]Join three table for Report in Mysql
我想为使用以下信息的航空公司生成报告
我的日期表包括一系列日期
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
如何通过联接三个表产生期望的结果?
您可以使用如下查询:
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中的示例输出所建议。
请尝试以下查询:
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
似乎您需要一个所谓的FULL JOIN
以将“日期”和“航线”条目的所有组合与包含每天和航空公司的航线数的列一起使用。
令人遗憾的是,MySQL缺乏对FULL JOIN
支持, 自几年以来就有一个功能请求被公开 。
仍然可以模拟这样的功能。 很好的阅读将是https://explainextended.com/2009/04/06/emulating-full-outer-join-in-mysql/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.