2011-08-30 196 views
1

我有一个包含UserId,ItemId和ItemName列的表。如果用户具有特定用户项目的所有项目,我希望获得某些用户的不同项目。我该怎么做与SQL服务器Sql Server 2008查询

+2

请提供一些示例数据和预期结果或改进您的口头解释。我得到你想要找到具有特定用户所做的所有项目的所有用户。但那又如何?你想找到这个完整用户拥有的特定用户不需要的所有附加项目? –

+0

你的意思是这样吗?:'SELECT ItemId,ItemName FROM Item WHERE UserId = @ userid' – David

+0

此外,为什么表具有'ItemId'和'ItemName'。应该只有'ItemId'并且你加入来获取名字。 –

回答

4

您可以使用关系部门来查找拥有所有相同的项目UserId = 1的所有用户。 Some alternative approaches are discussed here。然后,您可以使用EXCEPT减去用户1的项目。

SELECT ItemId 
FROM UserItems U1 
WHERE NOT EXISTS (SELECT * 
        FROM UserItems U2 
        WHERE UserId = 1 
          AND NOT EXISTS (SELECT * 
              FROM UserItems U3 
              WHERE U1.UserId = U3.UserId 
                AND U2.ItemId = U3.ItemId)) 
EXCEPT 
SELECT ItemId 
FROM UserItems 
WHERE UserId = 1 
+0

+1我第一次见到用于EXCEPT。感谢您的复习。 –

+0

它的工作。感谢很多 – user811686