SQL Server:连接具有许多条件的表

时间:2015-11-11 08:12:27

标签: sql-server sql-server-2008 sql-update

我有两张桌子:

  • 项目表。每个项目都有一个类型(字符串)和名称。

Table 1 - Items

  • 项目之间的连接表。 Side-A和Side-B包含表1中的键。如果项目位于A侧或B侧,则侧面具有意义 - 是物质

Table 2 - Connections

我们可以假设类型1的每个项目(黄色)必须具有至少一个连接,类型为2(绿色),而Type-1项目为 A面,Type-2项位于 B面。 A面也可以是2型,B面也可以是1型,但我们可以忽略它们。我在类型1 的项目中有一些有趣的 类型2的B面。在我的例子中 - 它是我用红色箭头标记的行。

现在,我需要UPDATE(使用T-SQL脚本)每个类型为1的项目的名称,以及类型为2的第一个项目的名称与B方有关。 在我的示例中 - 项目1将获得项目3的名称(尽管它也与项目6有关联),项目2将获得项目3的名称。

我对这个剧本感到麻烦,我很乐意得到帮助...

1 个答案:

答案 0 :(得分:1)

如果我们建立起来:

第一步:选择一些数据

select IA.* from Items IA

第二步:加入连接

select IA.* from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 

第三步:加入双方的连接

select IA.* from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key

第四步:选择我们想要的东西:

select IA.Key, IB.Name 
from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key

第五步:进行更新:

update IA
set Name = IB.Name 
from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key