У меня есть три разные таблицы, которые я пытаюсь правильно объединить, но у меня возникают некоторые проблемы.
Вот таблицы
- Поезд: список поездов (choo-choooo) и длина поезда в количестве вагонов
- WTA: Wagon Tonnes A - Масса вагонов в поезде в местоположении A
- WTB: Wagon Tonnes B - Вес вагонов в поезде в местоположении B
Проблема: некоторые поезда полностью отсутствуют в одной или двух таблицах WagonTonnes. Некоторые отдельные вагоны отсутствуют в таблицах WagonTonnes. И я хочу, чтобы мой запрос показывал эти случаи как нулевые, если их не было.
Сначала я попытался сделать это, и он отлично работает.
select
train.id,
train.length,
a.position_in_train
a.tonnes,
from
train
left outer join wta a
using (train_id)
Теперь я хочу добавить левое внешнее объединение для b, вот так
select
train.id,
train.length,
a.position_in_train
a.tonnes,
b.position_in_train,
b.tonnes
from
train
left outer join wta a
using (train_id)
left outer join wtb b
using (train_id)
Но это идет наперекосяк и повторяет один и тот же результат строки снова и снова.
Предлагаемое решение
Я подозреваю, что мне как-то нужно получить запрос с поезда, который вместо того, чтобы выглядеть так,
train.id train.length
7 163
выглядит так
train.id train.position
7 1
7 2
7 3
7 4
... ...
7 162
7 163
А затем переписать мои объединения, чтобы они выглядели так:
left outer join wta a
on (a.train_id = train.train_id and a.position = train.position)
Вопрос 1: Правильный ли мой общий подход к этой проблеме? (Присоединиться к мудрым)
Вопрос 2: Правильно ли мое решение? Если да, то как я могу это реализовать?