【发布时间】:2020-06-01 11:15:27
【问题描述】:
出于数据分析的目的,我想展平父子表。 我有服务订单表 tssoc210 作为
orno|acln
1 |10
1 |20
2 |20
.
.
它的活动(劳动力、材料、其他)在另外 3 个表中维护为 tssoc220(劳务用)
orno|acln|lino|invn|eqan|asto
1 |10 |A |600 |2 |120
1 |10 |B |607 |1 |100
.
.
tssoc230(用于材料)
orno|acln|lino|invn|eqan|asto
1 |10 |L1 |700 |1 |110
1 |10 |L2 |704 |3 |200
1 |10 |L3 |407 |4 |100
1 |20 |L1 |708 |1 |100
2 |20 |L1 |790 |1 |200
.
.
tssoc240(其他)
orno|acln|lino|invn|eqan|asto
1 |10 |M1 |400 |2 |500
2 |20 |M1 |490 |1 |100
.
.
我想加入这些表格
orno|acln|l_lino|l_invn|l_eqan|l_asto|m_lino|m_invn|m_eqan|m_asto|o_lino|o_invn|o_eqan|o_asto
1 |10 |A |600 |2 |120 |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
1 |10 |B |607 |1 |100 |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL
1 |10 | NULL |NULL |NULL |NULL |L1 |700 |1 |110 |NULL |NULL |NULL |NULL
1 |10 | NULL |NULL |NULL |NULL |L2 |704 |3 |200 |NULL |NULL |NULL |NULL
1 |10 | NULL |NULL |NULL |NULL |L3 |407 |4 |100 |NULL |NULL |NULL |NULL
1 |10 | NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |M1 |400 |2 |500
1 |20 | NULL |NULL |NULL |NULL |L1 |708 |1 |100 |NULL |NULL |NULL |NULL
2 |20 | NULL |NULL |NULL |NULL |L1 |790 |1 |200 |NULL |NULL |NULL |NULL
2 |20 | NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |M1 |490 |1 |100
.
.
如果我离开 join tssoc220,tssoc230, tssoc240 和 tssoc210(tssoc210 作为左表),它会复制该行。
left join tssoc220 ON tssoc210.orno = tssoc220.orno and tssoc210.acln = tssoc220.acln
left join tssoc230 ON tssoc210.orno = tssoc230.orno and tssoc210.acln = tssoc230.acln
left join tssoc240 ON tssoc210.orno = tssoc240.orno and tssoc210.acln = tssoc240.acln
我哪里错了?
【问题讨论】:
-
如果你在 orno 一个 acln 上加入这四个表,对于 orno=1,acln=10,你将得到 1 x 2 x 3 x 1 = 6 条记录。也许你也需要加入
eqan。我真的不能说。这是一个需要了解表建模内容的问题。
标签: sql-server join parent-child multiple-tables