【发布时间】:2018-11-28 23:04:38
【问题描述】:
在 mysql 中,我在尝试获取正确数据时遇到问题。我想我必须使用 union 从两个表中获取所有结果,但不知道该怎么做。
表格说明:
- 订单保留订单号
- 员工持有员工
- 区域包含区域名称
- 实际时间有区域 ID、订单 ID 和交付所需的小时数
- 交付详细信息包含员工 ID、员工交付的区域以及交付所需的小时数
订购
| id | number |
|----|--------|
| 1 | 0001 |
员工
| id | name |
|----|------|
| 1 | Jon |
区域
| id | name |
|----|-------|
| 1 | ZoneA |
| 2 | ZoneB |
实际时间
| id | zone_id | eta_hours | order_id |
|----|---------|-----------|----------|
| 1 | 1 | 5 | 1 |
| 2 | 2 | 4 | 1 |
deliver_details
| id | order_id | employee_id | zone_id | hours |
|----|----------|-------------|---------|-------|
| 1 | 1 | 1 | 1 | 3 |
| 2 | 1 | 1 | 1 | 1 |
我希望得到的是区域名称、交付所需的小时数以及员工交付的总小时数。如果员工没有交付到该区域,则显示 0
预期输出
| zone_name | hours | eta_hours | employee_name |
|-----------|-------|-----------|---------------|
| ZoneA | 4 | 5 | Jon |
| ZoneB | 0 | 4 | Jon |
我尝试在实际时间建立一个联合,但我没有做对。
这是我尝试过的(请注意,这只是为了获得正确的区域以及交付时间和实际时间)。
SELECT deliver_details.zone_id, actual_times.zone_id, zones.zone_name FROM actual_times
RIGHT JOIN deliver_details ON actual_times.order_id = deliver_details.order_id
INNER JOIN zones ON zones.id = deliver_details.zone_id
WHERE deliver_details.order_id = 1
GROUP BY deliver_details.zone_id
UNION ALL
SELECT deliver_details.zone_id, actual_times.zone_id, zones.zone_name FROM actual_times
LEFT JOIN deliver_details ON actual_times.order_id = deliver_details.order_id
INNER JOIN zones ON zones.id = actual_times.zone_id
WHERE actual_times.order_id = 1
group by actual_times.zone_id
我非常想在一个查询中获得所有这些信息。有没有办法做到这一点?
请注意,这是对我遇到的更复杂问题的简化。如果您需要更多解释或有什么不明白的地方,请告诉我。
【问题讨论】:
标签: mysql sql ruby-on-rails