我有一些数据库模式,我有两个表和一个映射表来定义我的两个表之间的关系。这些表是一个用户表(在本例中我称之为Sibling)和一个对象表,其中map表定义了用户与哪些对象相关。当然,我可以轻松地运行查询以按用户ID获取地图表的记录列表,但我还需要获取所有" sibling"可能与相同对象相关的其他用户的记录。我尝试使用公用表表达式来查询记录,但我遇到了无限循环问题。我甚至不确定CTE是否应该解决这个问题。我在这里设置了一个SQLFiddle示例。
http://sqlfiddle.com/#!6/289a4/6
因此,如果我查询兄弟ID为101,我希望得到以下记录集。
1 101
1 102
2 101
2 103
答案 0 :(得分:1)
必需的输出:
declare @Sibling int
set @Sibling = 101
;with Objects as
(
select ObjectId from ObjectSiblingMap
where SiblingId = @Sibling
)
,Siblings as
(
select ObjectId,SiblingId from ObjectSiblingMap
where ObjectId in
(select ObjectId from Objects)
)
select * from Siblings
答案 1 :(得分:0)
您可以轻松检索映射到特定用户的对象:
SELECT ObjectId
FROM ObjectSiblingMap
WHERE SiblingId = 101
现在,为了获得与用户101相同的对象相关的用户,您应该使用基于先前结果的嵌套查询:
SELECT SiblingId
FROM ObjectSiblingMap
WHERE SiblingId <> 101
AND ObjectId IN
(SELECT ObjectId
FROM ObjectSiblingMap
WHERE SiblingId = 101)