【发布时间】:2011-07-26 13:33:04
【问题描述】:
我正在尝试正确连接三个不同的表,但遇到了一些问题。
这是表格
- 火车:火车列表 (choo-choooo) 和火车长度(以货车数量计)
- WTA:货车吨数 A - 位置 A 列车中货车的重量
- WTB:货车吨数 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:我的解决方案是否正确?如果是这样,我该如何实施?
【问题讨论】:
标签: sql oracle join left-join inner-join