我正在将旧的数据库设计迁移到新设计。旧的是一团糟,非常混乱(我没有参与旧的设计)。我附上了旧设计相关部分的图片:
a diagram http://i43.tinypic.com/e8k18y.png
名为Item的表也将存在于新设计中,并且它在新设计中获得了我需要的所有列,除了一个,它就是我的问题所在。我需要将名为'neededProp'的列与来自Item的每个新迁移行相关联(相关联,我的意思是新设计中新Item表中的列)。
因此,对于表环境中的特定eid,表Item中可以有 n 个条目。表格中存在“对应”集。知道Item和Room中关联哪些行的唯一方法是在相应表中的“itemId”和“objectId”列的帮助下。因此,例如对于特定的eid,Item和Room中可能有100个条目,它们的“itemId”和“objectId”可以是1到100之间的值,因此该列仅对于特定eid(或称为baseSeq)的特定eid是唯一的在表BaseFile中)。
基本上你可以说表Environment和BaseFile相互提醒,表Item和Room互相提醒。不同的是,有些表缺少一些列,而其他表可能有一些额外的。我不知道为什么它从一开始就是这样设计的。
我的问题是,如果有人可以帮我创建一个查询,这样我就可以找到Item-table中每一行的正确“neededProp”,这样我就可以将这些数据放到新设计中了?
如果我尝试下面的内容,我会遇到问题。如果我这样开始并运行此查询
select * from Environment e
join items ei on e.eid = ei.eid
我得到了400000行,这就是我想要的。但是,如果我再添加一行,那么它看起来像这样:
select * from Environment e
join items ei on e.eid= ei.eid
left join Room r on e.roomnr = r.roomobjectnr
我得到了疯狂的行数,因此必须进行一些乘法运算。我希望在加入第三个表后获得相同数量的行(在本例中为400000)。这有可能吗?也许就像创建前两行的临时视图一样。
我正在使用MSSQL服务器。
答案 0 :(得分:1)
试试这个:
select *
from Environment e
inner join items ei on ei.eid = e.eid
left outer join
(
select *
from BaseTable b
inner join Room r on r.roomobjectnr = b.baseseq
) br on br.baseseq = e.roomnr and br.objectid = ei.itemid
干杯 -