2011-08-30 240 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