В MySQL у меня возникла проблема при попытке получить правильные данные.Я думаю, что я должен использовать union, чтобы получить все результаты из обеих таблиц, но не уверен, как это сделать.
Описание таблиц:
- Порядок содержит номера заказов
- Сотрудник удерживает сотрудника
- Зона содержит имена зон
- Фактическое время имеет идентификатор зоны, идентификатор заказа и количество часов, которое требуется для доставки
- Сведения о доставке содержат идентификатор сотрудника, зону, в которую доставлен сотрудник, и количество часов, которое потребовалось для доставки
Заказ
| id | number |
|----|--------|
| 1 | 0001 |
сотрудников
| id | name |
|----|------|
| 1 | Jon |
зоны
| id | name |
|----|-------|
| 1 | ZoneA |
| 2 | ZoneB |
actual_times
| id | zone_id | eta_hours | order_id |
|----|---------|-----------|----------|
| 1 | 1 | 5 | 1 |
| 2 | 2 | 4 | 1 |
delivery_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
Я в значительной степени пытаюсь получить все это в одном запросе.Есть ли способ сделать это?
Обратите внимание, что это упрощение более сложной проблемы, с которой я сталкиваюсь.Если вам нужно больше объяснений или что-то не имеет смысла, пожалуйста, дайте мне знать.